c语言求素数合数

我自己写的运行结果有点离谱啊 第一个答案是对的 但是后面跟一串是什么意思
main()
{
int m,i,k;
scanf("%d",&m);
k=sqrt(m);
for(i=2;i<=k;i++)
{
if(m%i==0)
}
if(m=n)
{

printf("%d和数",m);
}
else
printf("%d素数",m);
}
return0;
}

第1个回答  2011-06-01
# include <stdio.h>
# include <math.h>

int main(void)
{
int m,i,k;
scanf("%d",&m);

k=(int)sqrt(m);

for(i=2;i<k;i++)
{
if(m%i==0)
break;//here
}
if(i==k)//here
{
printf("%d素数\n",m);
}
else
{
printf("%d合数\n",m);
}
return 0;
}

这个的思想是通过递增除
到整除的就跳出
也就是你的
if(m%i==0)
break;//here

如果是素数就不会有跳出,则最后的时候i已经增加到k值
所以最后通过判断i与k是否相等来得知是否是素数追问

我运行了这个程序 如果数字是1或2或3 答案是错误的

第2个回答  2011-06-01
for(i=2;i<=k;i++)
{
if(m%i==0)
}
你上面的代码根本就没判断是不是素数
下面贴上正确的

#include<stdio.h>
int prime(int n)
{
if(n<2)
return 0;
for(int i=2;i*i<=n;i++)
if(n%i==0)
return 0;
return 1;
}
void main()
{
int n;
scanf("%d",&n);
if(prime(n)&&n!=1) printf( "%d是素数\n", n );
else if(n==1) printf( "%d既不是质数也不是合数\n", n );
else printf( "%d是合数\n", n );
}追问

非常感谢 呵呵 不过我把 int i=2提到前面程序才运行了 不知道为什么

本回答被提问者采纳
相似回答