素数定义:只能分解成1和本身两个因数
int n,i;double s;scanf("%d",&n);
(注意此处的s不能取int类型,否则单步调试它s的值会与n是偶数时相等容易引起混淆)
假设输入一个数36
s = sqrt(36) //s = 6;
for( i=2;i<=s;i++ ){if( n%i==0 ){break;}}if( i>s )printf("是素数");elseprintf("不是素数");
很显然程序第一步就会判定不是素数
因为36%2的值已经是0
我们暂时不看break语句
36%i也就是会i最多取到6这个数字
当i = 6时36%6 == 0;
i≯s
printf不是素数
我们再将36换成37试试看
s = sqrt(37) //计算器得出s≈6.083
可见s是大于6的
这时i可以从2开始取到7
37%1到6都不为0
此时i为6还要++变为7
i > s
则可以printf此数是素数
下列为程序示例:
#include<stdio.h>#include<math.h>int main(){int n,i;double s;scanf("%d",&n);s = sqrt(n);for( i=2;i<=s;i++ ){if( n%i==0 ){break;}}if( i>s ){printf("是素数");}else{printf("不是素数");}return 0;}
这里有很多新手不理解为什么i<n-1
回到素数的定义
也就是说n取余2到n-1中的所有数都不能为0.
如有错误,还请各位多加指正!