我为什么用这个循环不行??求一个偶数等于素数之和.打印出来.
#include<stdio.h>
#include<math.h>
main()
{
int i,j,n,j1,i1;
printf("input the n=");
scanf("%d",&n);
if(n%2==1)
printf("the number is wrong\n");
for(i=1;i<=n/2;i++)
{
j=n-i;
for(j1=2;j<=sqrt(j);j1++)
{
for(i1=2; i1<=sqrt(n/2); i1++)
{ if (j%j1==0 && i%i1==0)
printf("j=%d, i=%d\n", j, i);
}
}
}
}
----------------解决方案--------------------------------------------------------
感觉循环有点错误.
应该要分开来判断i和n-i,看他们是不是素数.i不是1开始,因为1不是素数.
----------------解决方案--------------------------------------------------------
我为什么用这个循环不行??求一个偶数等于素数之和.打印出来.
#include<stdio.h>
#include<math.h>
main()
{
int i,j,n,j1,i1;
printf("input the n=");
scanf("%d",&n);
if(n%2==1)
printf("the number is wrong\n");
for(i=1;i<=n/2;i++)
{
j=n-i;
for(j1=2;j<=sqrt(j);j1++)
{
for(i1=2; i1<=sqrt(n/2); i1++)
{ if (j%j1==0 && i%i1==0)
printf("j=%d, i=%d\n", j, i);
}
}
}
}
----------------解决方案--------------------------------------------------------
为什么换,楼上?解释下,谢谢
----------------解决方案--------------------------------------------------------
以下是引用wandison在2006-11-23 18:14:23的发言:
我为什么用这个循环不行??求一个偶数等于素数之和.打印出来.
#include<stdio.h>
#include<math.h>
main()
{
int i,j,n,j1,i1;
printf("input the n=");
scanf("%d",&n);
if(n%2==1)
printf("the number is wrong\n");
for(i=1;i<=n/2;i++)
{
j=n-i;
for(j1=2;j1<=sqrt(j);j1++)
{
for(i1=2; i1<=sqrt(n/2); i1++)
{ if (j%j1==0 && i%i1==0)
printf("j=%d, i=%d\n", j, i);
}
}
}
----------------解决方案--------------------------------------------------------
以下是引用wandison在2006-11-23 18:14:23的发言:
我为什么用这个循环不行??求一个偶数等于素数之和.打印出来.
#include<stdio.h>
#include<math.h>
main()
{
int i,j,n,j1,i1;
printf("input the n=");
scanf("%d",&n);
if(n%2==1)
printf("the number is wrong\n");
for(i=1;i<=n/2;i++) /*i 不能从1开始,应该从2开始.另,以下程序最好放在 else{ }中*/
{
j=n-i;
for(j1=2;j<=sqrt(j);j1++) /* 条件语句中的 j 应该换成 j1 */
{
for(i1=2; i1<=sqrt(n/2); i1++)
{ if (j%j1==0 && i%i1==0) /*这句完全错误,如果条件满足的话,i, j就是偶数了*/
printf("j=%d, i=%d\n", j, i);
}
}
}
}
下面是我改了以后的程序:
#include<stdio.h>
#include<math.h>
int main()
{
int i,j,n,j1,i1,k=1;
printf("input the n=");
scanf("%d",&n);
if(n%2==1)
printf("the number is wrong\n");
else
for(i=2;i<=n/2;k=1,i++)
{
j=n-i;
for(j1=2;j1<=sqrt(j);j1++)
{
for(i1=2; i1<=sqrt(n/2); i1++)
if(j%j1==0 || i%i1==0)
{
k=0;
break;
}
}
if(k==1)printf("j=%d, i=%d\n", j, i);
}
return 0;
}
[此贴子已经被作者于2006-11-24 18:49:54编辑过]
----------------解决方案--------------------------------------------------------
谢谢大家,我懂了,特别是hzlqzh2006给我讲的那么详细.真的很感谢.我是新手请大家以后多多指教.谢谢!!
----------------解决方案--------------------------------------------------------