蒟蒻不太会分析时间复杂度,代码直接把之前写的埃氏筛法套过来了
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
int prime[1000000], n = 1000000, len;
int ratosthenes(int prime[], int n)//埃氏筛法
{
bool* flag = (bool*)malloc(sizeof(bool) * n);
int temp, len = 0;
memset(flag, true, sizeof(bool) * n);
//flag[2] = true;
for (int i = 2; i <= n / 2 + 1; ++i)
{
if (!flag[i])continue;
temp = i * 2;
while (temp <= n)
{
flag[temp] = false;
temp += i;
}
prime[len++] = i;
}
for (int i = n / 2 + 2; i <= n; ++i)
if (flag[i])
prime[len++] = i;
return len;
}
int main()
{
memset(prime, 0, sizeof(prime));
len = ratosthenes(prime, n);//调用埃氏筛法
int t,flag=0;
scanf("%d", &t);
for (int k = 4; k <= t; k += 2)
for (int i = 0; i < len; ++i) {
if (prime[i] >= len)
break;
for (int j = i; j < len; ++j) {
if (prime[j] >= len)
break;
if (prime[i] + prime[j] == k) {
printf("%d=%d+%d\n", k, prime[i], prime[j]);
flag = 1;
break;
}
}
if (flag) {
flag = 0;
break;
}
}
return 0;
}