【解题报告】LightOJ1259-Goldbach`s Conjecture 素数筛

    技术2022-07-10  124

    很容易就能想到做法,但是被卡空间完被卡时间qaq 首先埃氏筛一下,这时候v数组可以开bool,不开好像会被卡,然后prime数组也需要开小点,这里开1e6就够,空间上差不多就是这样 时间上,最开始是想着从2遍历到n/2,一个个判断是不是质数,结果T;之后想到直接从素数表遍历就可以了,之后AC AC代码:

    #include <bits/stdc++.h> using namespace std; const int maxn=10000005; bool v[maxn];//v[i]:第i个数的最小质因子 int prime[maxn/10];//记录找到的素数 int m;//找到素数的个数 void find_primes(int n) { for(int i=0;i<maxn;i++) v[i]=false; m=0; for(int i=2;i<=n;i++){ if(v[i]) continue; prime[++m]=i; for(int j=i;j<=n/i;j++) v[i*j]=true; } } int main() { find_primes(maxn-5); int t;cin>>t; for(int j=1;j<=t;j++){ int n;cin>>n; int ans=0; for(int i=1;i<=m&&prime[i]*2<=n;i++){ if(!v[n-prime[i]]) ++ans; } cout<<"Case "<<j<<": "<<ans<<endl; } }
    Processed: 0.014, SQL: 9