一个简单程序问题

来源:百度知道 编辑:UC知道 时间:2024/06/14 17:20:48
把一个数拆成2个素数的和的程序:#include<stdio.h>
#include<stdlib.h>
int isprime(int n){
int m=2;
for(;m*m<=n;m++)
if(n%m==0)return 0;
return 1;}
void main()
{int m,n,x;
printf("please input a number\n");
scanf("%d",&n);
for(x=1;x<=n;x++)
for(m=3;m<=n;m++)
if(isprime(n)&&isprime(n-m))
printf("%d=%d+%d\n",n,m,n-m);
system("pause");}
大家帮忙看看,为什么不能按预期运行?(编译没错误)

犯了些小错误,给你改了一下:

#include<stdlib.h>
int isprime(int n)
{
if ( n == 1 || n == 2)
{
return 1;
}

int m=2;
for( ;m*m<=n; m++ )
if(n%m==0)return 0;
return 1;
}

void main()
{
int m,n,x;
printf("please input a number\n");
scanf("%d",&n);
for(m=1;m<=n/2;m++)
if( isprime(m) && isprime(n-m) )
printf("%d=%d+%d\n",n,m,n-m);
system("pause");
}

for(x=1;x<=n;x++)
for(m=3;m<=n;m++)
if(isprime(n)&&isprime(n-m))

你的函数应该写成两处参数,int isprime(int a, int n)以表示a是否为n的素数,而你用的函数判断不出来哈,再都你是拆成两个素数和,而你题中m你并没有判断呀,还有n-m那个也不对呵

不如你换个思路吧
把小于n的素数都找出来(找的时候也可以双向查找),然后用二分法配对