C语言编程 求素数 求解释

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
void main()
{
int m,i,k;
scanf("%d",&m);
k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)
break;
if(i>=k+1)
printf("%d is a prime number\n",m);
else
printf("%d is not a prime number\n",m);

system("pause");
}

第1个回答  2011-09-22
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
void main()
{
int m,i,k;
scanf("%d",&m);
k=sqrt(m); //一个数不是素数,那么开平方也一定不是素数。
//将一个数开平方再取整,可以减少比较次数,提高运行效率。

for(i=2;i<=k;i++)//一个一个比较看这个数能不能除尽小于它的所有数
if(m%i==0) //如果可以除尽这个数,那么就跳出循环
break;
if(i>=k+1) //如果i>=k+1 说明一直循环到最后了,中间没有可以除尽的数,这个数就是素数
printf("%d is a prime number\n",m);
else //相反就不是素数
printf("%d is not a prime number\n",m);

system("pause");
}追问

9不是一个素数 但是开平方后 3是个素数

追答

这里我解释错了。
假如一个数不是素数,那么开平方后的数之内,必定有可以被它整除的数。
比如 9,开平方是3, 那么 2和3里面必定有一个可以被9整除。
如果是17,开平方取整是4,那么2、3、4里面都不能整除17,所以17是素数

追问

能给我解释下 循环的过程吗 过程弄明白了 就好分析了 比如在循环体加上大括号 这样的话 我就能明白循环的过程了

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