poj2262 Goldbach‘s Conjecture(质数,空间换时间)

    科技2022-07-10  125

    题意:验证哥德巴赫猜想,一个偶数是否能被两个素数相加,如果能输出两者差最大的两个。

    第一遍的代码,先打一遍质数表,再用双指针法搜(要判断的量太多,超时)

    没有意识到已经打了bool表,可以直接判断(经验不足)

    #include<cmath> #include<cstdio> #include<algorithm> #include<iostream> #include<string.h> #define MAXN 1000000 using namespace std; int n; bool is_primes[MAXN];//判断质数 int primes[MAXN];//质数数组,从1开始 int prime_count;//质数数量 void GetPrimes(int n){ int k = 0; memset(is_primes, true, sizeof(is_primes)); for (int i = 2; i <= n; i++){ if (!is_primes[i]) continue; if(i % 2) primes[++k] = i; for (int m = 2; m*i <= n; m++) is_primes[m*i] = false; } prime_count = k; } int main() { GetPrimes(MAXN); while(scanf("%d", &n), n){ int num = 1; while(1){ if(is_primes[n - primes[num] ]){ printf("%d = %d + %d\n", n, primes[num], n - primes[num] ); break; } num++; } } return 0; }
    Processed: 0.016, SQL: 8