HOJ12186求N!%N^2

来源:互联网 发布:下载百度一下软件 编辑:程序博客网 时间:2024/05/16 12:00
 

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<iostream>
using namespace std;
__int64 ans,n,m;
int vis;
__int64 lcm(int x ,int y)
{
    int ex,a,b;
    a = max(x,y);
    b = min(x,y);
    while(b != 0)
    {
        ex = a%b;
        a = b;
        b = ex;
    }
    return a;
}
int main()
{
    while(scanf("%I64d",&n) != EOF)
    {
        if(n == 1)printf("YES\n");
        if(n == 4)printf("NO\n");
        if(n != 1 && n != 4)
        {
            for(int i = 2 ; i <= sqrt(n) ; i++)
            {
                if(n % i == 0)
                {
                    vis = 1;
                    break;
                }
            }
        if(vis == 1)printf("YES\n");
        else printf("NO\n");
        }

    }
}
如果用公式精度不行,如果直接算时间不行不说,也没这么大的整型来表示,N!%N^2是否为0,其实就是(N-1)!%N,那么,易知,如果N为非素数,则必然可以找到一个1---N-1的来可以除以N-1,得到的结果在1-N-1中也能够找到,所以必然成立,当N为素数的时候,根据素数的性质,在2-N-1中必然没有数可以被N整除.

这样一来,这个题目就可以转化成求N是不是素数的题目了.当然,对于N=4和N=1的时候要特殊处理

原创粉丝点击