dut OJ 1277 素数测试

来源:互联网 发布:apache 去掉index.php 编辑:程序博客网 时间:2024/06/06 19:57
我尼玛就无语了!@!!!!10^10是 1后面10个零! 也就是100亿,int20多亿!
爆int 用long long
这种题 输入最大是n 先打表 到根号n 内的素数全找出来
然后呢 对于1-根号n范围内 直接根据那个筛选法的数组判断

对于大数 我们用素数表的素数去除就可以了。一旦整除 false

#include<iostream>#include<cstdio>#include<cstring>typedef long long LL;bool arr[100001];int p[10000];int k;void init(){    arr[1]=0;    arr[2]=1;    for(int i=3;i<=100000;i++)    {        if(i%2)        arr[i]=1;        else        arr[i]=0;    }    for(int i=3;i*i<=100000;i+=2)    {        if(arr[i])        {            for(int j=i+i;j<=100000;j+=i)            arr[j]=0;        }    }    k=0;    for(int i=1;i<=100000;++i)    {        if(arr[i])        p[k++]=i;    }}int main(){    init();    LL n;    while(~scanf("%lld",&n))    {        if(n<=100000)        {            printf(arr[n]?"true\n":"false\n");        }        else        {            bool fin=0;            for(int i=0;i<k;++i)            {                if((long long)p[i]*p[i]>n)                break;                if(n%p[i]==0)                {                    fin=1;                    printf("false\n");                    break;                }            }            if(!fin)            printf("true\n");        }    }    return 0;}


原创粉丝点击