NEFU 素数

函数版素数判定

#include <bits/stdc++.h>
using namespace std;
int num[10005];
int a[10005];
int t=0;
int sh()//埃氏筛法(一般来说用此法筛素数就够了)
{
    memset(a,1,sizeof(a));
    a[0]=a[1]=0;
    for(int i=2; i<=10005; i++)
    {
        if(a[i])
        {
            num[t]=i;
            t++;
            for(int j=2; j*i<10005; j++)//筛掉当前数的倍数
                a[j*i]=0;
        }
    }
    return 0;
}
int su(int n)//判断是不是素数的函数
{
    int mark=0;
    for(int i=0; num[i]<=sqrt(n*1.0);i++)//判断方法
    {
        if(n%num[i]==0)
        {
            mark=1;
            break;
        }
    }
    if(n==1)//此法不能判断1,把1单独拿出来
        mark=1;
    return mark;
}
int main()
{
    sh();
    int n;
    while(scanf("%d",&n)!=-1)
    {
        if(su(n)==0)
            printf("YES\n");
        else
            printf("NO\n");
    }
    return 0;
}

知否知否,应是绿肥红瘦

#include <bits/stdc++.h>
using namespace std;
int num[10000005];
int a[10000005];
int t=0;
int sh()//线性筛法,比埃氏筛更省时间
{
    memset(a,1,sizeof(a));
    a[0]=a[1]=0;
    for(int i=2; i<=10000001; i++)//注意数组不要越界
    {
        if(a[i])
        {
            num[t]=i;
            t++;
        }
        for(int j=0; j<=t&&num[j]*i<=10000001; j++)//减少每一次筛的数量
        {
            a[num[j]*i]=0;
            if(i%num[j]==0)//及时止损,避免筛重复
                break;
        }
    }
}
int su(long long int n)
{
    int mark=0;
    for(int i=0; num[i]<=sqrt(n*1.0); i++)
    {
        if(n%num[i]==0)
        {
            mark=1;
            break;
        }
    }
    if(n==1)
        mark=1;
    return mark;
}
int main()
{
    sh();
    int n;
    cin>>n;
    while(n--)
    {
        long long int a,b,c;
        cin>>a>>b>>c;
        long long int res=a+b-c;//数据类型要注意
        if(su(res)==0)
            cout<<"yes"<<endl;
        else
            cout<<"no"<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_46126537/article/details/104314768