#include
using namespace std;
int cnt = 0;
bool isprime(int n)
{
if(n == 0 || n == 1) return false;
for(int i = 2; i <= sqrt(n); i++)
if(n % i == 0) return false;
return true;
}
void goldbach(int n)
{
for(int i = 2; i <= n / 2; i++)
if(isprime(i) && isprime(n - i))
{
printf("%d+%d=%d\n", i, n - i, n);
cnt++;
}
}
int main()
{
int n, m;
scanf("%d%d", &n, &m);
for(int i = n; i <= m; i += 2) goldbach(i);
end = clock();
printf("%d", cnt);
return 0;
}
怎么办90分代码,TLE,还能怎么优化(咬牙切齿
制作不易,请采纳 : 我试过了是对的
#include <stdio.h>
int isPrime(int n)
{
int i;
if (n <= 3) return n > 1;
for (i = 2; i * i <= n; i++)
if (n % i == 0) return 0;
return 1;
}
int main()
{
int i, n;
while (scanf("%d", &n) == 1 && n > 0) // 输入 <= 0 结束
{
if (n % 2 != 0) continue; //输入非偶数,重新输入
for (i = n / 2; i > 1; i--) {
if (isPrime(i) && isPrime(n - i))
{
printf("%-d=%-d+%-d\n", n, i, n - i);//输出
break;
}
}
}
return 0;
}
整体修改如下,供参考:
#include <stdio.h>
int cnt = 0;
int isprime(int n)
{
int i;
if (n < 4) return n > 1;
for (i = 2; i * i <= n; i++)
if (n % i == 0) return 0;
return 1;
}
void goldbach(int n)
{
for (int i = 2; i <= n / 2; i++)
if (isprime(i) && isprime(n - i))
{
printf("%d+%d=%d\n", i, n - i, n);
cnt++;
break;
}
}
int main()
{
int n, m;
scanf("%d%d", &n, &m);
for (int i = n; i <= m; i++)
if (i >= 4 && i % 2 == 0)
goldbach(i);
printf("%d", cnt);
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话: