C语言问题,编写一个判断素数的函数,再编写一个函数将一个偶数表示为两个素数之和。在主函数输入任一个大

#include<stdio.h>
#include<math.h>
void main()
{
int prime(int);
void f(int x);
int n,m;
printf("\nInput an integer:");
scanf("%d",&n);
if(prime(n))
printf("\n%d is a prime.\n",n);
else
printf("\n %d is not a prime.\n",n);
printf("Please input a even number(>=6):\n");
scanf("%d",&m);
while(m%2!=0)
{printf("Please input a even number");
scanf("%d",&m);
}
printf("%d=",m);
f(m);
}
int prime(int n)
{int flag=1,i;
for(i=2;i<=n/2&&flag==1;i++)
if(n%i==0)
flag=0;
return (flag);
}
void f(int x)
{ int p,q,i,fp,fq;
p=1;
do
{p=p+1,q=x-p;
fp=1;
for(i=2;i<=sqrt(p);i++) //为什么这里要用sqrt函数
if(p%i==0)
{fp=0;break;}
fq=1;
for(i=2;i<sqrt(q);i++)
if(q%i==0){fq=0;break;}
}
while((fp==0)||(fq==0)); //这里让fq==0和fp==0 有什么用?
printf("%d+%d",p,q);
}

第1个回答  2011-03-26
第1个问题,sqrt开根号,因为p=√p*√p,当i>√p时,i必定不能整除p,所以计算到√p就够了
第2个问题,根据上面的算法fq,fp代表p/i的余数为0,q/i的余数为0,也就说证明了,计算出来的i(代表2个数值)为q,p的约数追问

第二个问题还是不太懂~~~

第2个回答  2011-04-01
#include<math.h> //这里要用到sqrt函数
int isprime(int a)
{
int r,i,w=0;//w为1则不是,为0则是
for(i=2;i<=sqrt(a)&&w==0;i++)
{
r=a%i;
if(r==0)
w=1;
}
return !w;
}
void main()
{
int a,r;
scanf("%d",&a);
r=isprime(a);
if(r)
printf("Yes\n");
else printf("No\n");
}
另外,站长团上有产品团购,便宜有保证
相似回答