当前位置:Gxlcms > 数据库问题 > 问题 C: Goldbach's Conjecture

问题 C: Goldbach's Conjecture

时间:2021-07-01 10:21:17 帮助过:21人阅读

样例输出

1
2
2

题意:给出大于等于4的数p 然后找出俩个素数相加为p p1+p2 和 p2+p1 算一种


这个就是判断 <=n/2 的数 然后访问vis[i]&&vis[n-i] 都是素数 那么就是even number
#include<bits/stdc++.h>

using namespace std;
const int N=4e4;
int prime[N];
bool vis[N];
int cnt=0;
void isprime(int n)
{
    fill(vis,vis+N,false);
    cnt=0;
    for(int i=2; i<n; i++)
    {
        if(!vis[i])
        {
            prime[cnt++]=i;
        }
        for(int j=i+i; j<n; j+=i)
        {
            vis[j]=true;
        }
    }
}
int main()
{
    int n;
    isprime(N);
    while(scanf("%d",&n)==1,n){
        int sum=0;
        for(int i=2;i<=n/2;i++){
            if(!vis[i]&&!vis[n-i]) sum++;
        }
        printf("%d\n",sum);
    }
    return 0;
}

 

 

 

直接模拟下 也行 但是复杂度是n^2

#include<bits/stdc++.h>
  
using namespace std;
const int N=1e6+10;
int prime[N];
bool vis[N];
int cnt=0;
void isprime(int n)
{
    fill(vis,vis+N,false);
    cnt=0;
    for(int i=2; i<n; i++)
    {
        if(!vis[i])
        {
            prime[cnt++]=i;
        }
        for(int j=i+i; j<n; j+=i)
        {
            vis[j]=true;
        }
    }
}
int main()
{
    int n;
    while(scanf("%d",&n)==1,n){
        isprime(n);
        int sum=0;
        int flag=0;
        for(int i=0;i<cnt;i++){
            for(int j=i;j<cnt;j++){
                if(prime[i]+prime[j]==n){
                    sum++;
                }
            }
        }
        printf("%d\n",sum);
    }
    return 0;
}

 

问题 C: Goldbach's Conjecture

标签:output   actual   ati   numbers   ports   exist   tput   cond   gre   

人气教程排行