素数概念
质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数。
举例: 2、3、5、7、、、
算法分析
初级思路:
- N 是否是偶数?是偶数,就肯定不是素数;不是偶数,下一步
- 在小于 N 的奇数中寻找能被 N 整除的数。存在, N 不是素数;不存在, N 是素数。
代码:
#include<stdio.h> #include<math.h> int main() { int n; scanf("%d",&n); int mark=1; //mark标记 if((n!=2&&n%2==0)||n==1){ //如果 n为 1 或者大于2的偶数,则标记为不是素数 mark=0; }else{ int i; for (i=3;i<n;i+=2){ //用奇数作为除数进行循环测试 if(n%i==0){ mark=0; break; } } } if(mark==1){ printf("是素数"); }else{ printf("不是素数"); } return 0; }
中级思路:(a*b=N,则a或者b中必有一个数小于sqrt(N) )
- N 是否是偶数?是偶数,就肯定不是素数;不是偶数,下一步
- 在小于 sqrt(N) 的奇数中寻找能被 N 整除的数。存在, N 不是素数;不存在,,N 是素数。
代码:
#include<stdio.h> #include<math.h> int main() { int N; scanf("%d",&N); int mark=1; //mark标记 if((N!=2&&N%2==0)||N==1){ //如果 n为 1 或者大于2的偶数,则标记为不是素数 mark=0; }else{ int i; for (i=3;i<sqrt(N);i+=2){ //用小于sqrt(N)奇数作为除数进行循环测试 if(N%i==0){ mark=0; break; } } } if(mark==1){ printf("是素数"); }else{ printf("不是素数"); } return 0; }
如有错误欢迎指正