题目描述:
哥德巴赫猜想:任意一个大于等于4的偶数都能表示为两个质数之和
输入:
有多组测试数据,每行一个小于1e7的并且大于2的偶数
以EOF标志结束程序。
输出:
对于每组测试,输出拆分的结果,有多组结果则都要输出
输出顺序按拆分的第一个数的大小从小到大输出
这是我前几天看到的一个题目,也见到了几个人的代码,但是有些疑问..
希望有人指点.
一.
#include<stdio.h>
#include<math.h>/*这个头函数,MS加了没有用啊!*/
int main()
{int prime(long n);
long i,j;
int n=1;
while(j!=0)
{ if(n==4)
{
printf("4=2+2\n");
continue;
}
printf("input the num to ceshi:");
scanf("%ld",&j);
for(i=3;i<=j/2;i+=2)
{if(prime(i)&&prime(j-i)&&j-i>1)/*-i>1这个条件好像没用的,只要前两项就好!*/
printf("%ld=%ld+%ld\n",j,i,j-i);
}
}
return 0;
}
int prime(long n)
{
int i,flag=1;
for(i=2;i<=n/2;i++)/*这个是求素数的算法吗?为啥不是sqrt(n)*/
{if(n%i==0)
flag=0;
}
return(flag);
}
二.
#include <stdio.h>
/**
n>=3 and n is odd.
*/
int isPrime(int n)
{
int k, upperBound=n/2;
for(k=3; k<=upperBound; k+=2)
{
upperBound=n/k;/* 这个语句没看懂是起啥作用的*/
if(n%k==0)
reurn 0;
}
return 1;
}
int main()
{
int n, k, nHalf;
while(scanf("%d", &n)!=EOF)
{
nHalf = n>>1;/*这个右移一位的作用?没看懂*/
for(k=3; k<=nHalf; k+=2)
{
if(isPrime(k)==1 && isPrime(n-k)==1)
{
printf("%d=%d+%d\n", n, k, n-k);
}
}
}
return 0;
}
[此贴子已经被作者于2007-10-20 21:36:23编辑过]