小弟想请问关于哥德巴赫猜想的有关问题
小弟想请教关于哥德巴赫猜想的问题
小弟刚接触C,今天看到一道题目,
验证给出任意一个6到5000的偶数是否符合哥德巴赫猜想,并输出。
原型: int GUESS(unsignedint n);
输入参数:unsignedint n: 6≤n≤5000
返回值 0 不符合猜想
1 符合猜想
小弟越看越晕,求哪位大侠写出来看看,最好能解释下代码,谢谢哈哈
------最佳解决方案--------------------
解释:因为6到5000的偶数全部都符合猜想,这是已知的
认真回答的话,首先你需要一个判断质数的函数,一般的做法是循环从3到n/2的奇数k,并判断是否是质数,如果是,则判断n-k是否是质数,如果也是则验证成立,如果到最后都不成立则返回不成立
------其他解决方案--------------------
小弟刚接触C,今天看到一道题目,
验证给出任意一个6到5000的偶数是否符合哥德巴赫猜想,并输出。
原型: int GUESS(unsignedint n);
输入参数:unsignedint n: 6≤n≤5000
返回值 0 不符合猜想
1 符合猜想
小弟越看越晕,求哪位大侠写出来看看,最好能解释下代码,谢谢哈哈
------最佳解决方案--------------------
int GUESS(unsignedint n)
{
return 1;
}
解释:因为6到5000的偶数全部都符合猜想,这是已知的
认真回答的话,首先你需要一个判断质数的函数,一般的做法是循环从3到n/2的奇数k,并判断是否是质数,如果是,则判断n-k是否是质数,如果也是则验证成立,如果到最后都不成立则返回不成立
------其他解决方案--------------------
bool isPrime(unsigned int n)
{
if (n < 2)
return 0;
if (n < 4)
return 1;
if (n%2 == 0)
return 0;
for (int i=3; i*i <= n; i += 2)
{
if (n%i == 0)
return 0;
}
return 1;
}
int GUESS(unsigned int n)
{
for (int i=3; i <= n/2; i += 2)
if (isPrime(i) && isPrime(n-i))
{
cout<<n<<"="<<i<<"+"<<n-i<<endl;
return 1;
}
return 0;
}