最后一个re,其余全过了,我也不知道为什么

P1579 哥德巴赫猜想(升级版)

chenchenwwww @ 2020-02-24 22:23:52

//要证明一个奇数为三个质数组成
//奇 = 3*奇数 或者 = 偶数*2 +奇数  偶数中只有二为质数
int A[2000]={0};    //存质数 
#include<cstdio>
int es_seletion(int n)//A[]用于储存前2-n中的素数 
{
    bool vis[n+1];
    for(int i=0;i<=n;i++) vis[i] = 1;//初始化,若vis[i]=1, 则i为质数 
    for(int i = 2;i*i<=n;i++) 
    {
        if(vis[i])for(int j=2*i;j<=n;j+=i)//如果i为质数,则将它的倍数筛掉 
        {
            vis[j] = 0;
        }
    }
    int k = 0; 
    for(int i = 2;i<=n;i++) 
    {
        if(vis[i]) 
        {
            A[k] = i;
            k++;
        }
    }
    return k;//返回2-n中有多少的质数 
}
bool isprimer(int x)
{
    for(int i=2;i*i<=x;i++)
    {
        if(x%i==0) 
        return false;
    }
 return true;
}
int main()
{
    int n;
    scanf("%d",&n);
    if(isprimer(n-4)) {printf("%d %d %d",2,2,n-4);return 0;} 

    int k = es_seletion(n);
    for(int i=1;i<k;i++)
    {
        for(int j=1;j<k;j++)
        {
            if(isprimer(n-A[i]-A[j])) {printf("%d %d %d\n",A[i],A[j],n-A[i]-A[j]);return 0;}
        }
    }

 } 

by Computer1828 @ 2020-02-24 22:26:13

数组开大点?


by chenchenwwww @ 2020-02-25 15:55:39

@拥抱渴望者 还真是数组问题,谢谢!!


by 张慧婷1108 @ 2020-11-26 00:18:47

“for(int i=0;i<=n;i++) vis[i] = 1; //初始化,若vis[i]=1, 则i为质数 ”

楼主,想问问这一步是如何实现的?为什么是质数就会输出1呢


|