任务描述
输入两个大于6的正偶数a和b(a
[科普] 哥德巴赫猜想是数论中存在最久的未解问题之一。这个猜想最早出现在1742年普鲁士人克里斯蒂安•哥德巴赫与瑞士数学家莱昂哈德•欧拉的通信中。用现代的数学语言,哥德巴赫猜想可以表述为:“任何一个充分大的偶数(>6)都可以表示成两个奇素数的和的形式”。
输入样例:
10 16
输出样例:
10=3+7
12=5+7
14=3+11
16=3+13
#include
#include
int f(int a,int b)
{
for(int i=a;i<=b;i++)
{
for(int j=0;j<=sqrt(i);j++){
if(j%i==0)
return 0;
}
return 1;
}
}
int main()
{
int a,b;
scanf("%d%d",&a,&b);
for(int j=a;j<=b;j++){
for(int i=3;i<=j/2;i++)
{
if(f(j)==1&&f(j-i)==1&&i!=j-i)
printf("%d=%d+%d\n",j,i,j-i);
}
}
}
函数f需要两个参数,你f(j) 只给它传一个参数?而且直接下面这样看着更清爽:
#include<stdio.h>
#include<math.h>
int main()
{
int a,b;
scanf("%d%d",&a,&b);
for(int j=a;j<=b;j+=2)
{
for(int i=3;i<a;i+=2)
{
int sub=j-i;
if(sub %2 !=0)
{
if(sub % i==0)
continue;
printf("%d=%d+%d\n",j,i,sub);
break;
}
}
}
return 0;
}
f需要两个参数,你只传一个能对吗
你现在思路完全混乱,既然main里已经循环了,f里还从a到b循环是要干啥
#include<stdio.h>
#include<math.h>
int main(void)
{
int n,z,i,j,k;
scanf("%d",&n);
//n=24;
for( i=2;i<=n;i++)
{
int flag=0,p=0;
for( j=2;j<=sqrt(i);j++)// 这里需要注意,判断一个数是否是素数的循环变量初始值为 2 ,根据素数的定义也可以得出初始值不能为1
{ //如果此时 j 的初始值为 1 ,这个for循环将是一个无效代码段
if(i%j==0)
{flag=1;break;}
}
if(flag==0)
{
z=n-i;
for(k=2;k<=sqrt(z);k++)
{
if(z%k==0)
{p=1;break;}
}
}
if(flag==0&&p==0)break;
}
printf("%d = %d + %d",n,i,z);
return 0;
}