要降O(n^2)到O(n),否则TLE。
code:
<span style="font-size:18px;">#include <iostream>
#include <math.h>
using namespace std;
int n;
bool flag[1000000];
bool isPrime(int num)
{
if (num % 2 == 0)
return false;
for (int i = 3; i < (int)sqrt((double)num)+1; i+=2)
{
if (num%i == 0)
return false;
}
return true;
}
void table()
{
memset(flag,false,sizeof(flag));
int j = 0;
for (int i = 2; i <= 1000000; i++)
{
if (isPrime(i))
flag[i] = true;
}
}
void func()
{
for (int i = 3; i <= n/2; i+=2)
{
if (flag[i] == true && flag[n - i] == true)
{
printf("%d = %d + %d\n", n, i, n-i);
return;
}
}
}
int main()
{
table();
while (scanf("%d", &n)!=EOF && n!=0)
{
func();
}
//system("pause");
return 0;
}
</span>