判断一个数是否是素数
判断一个数是否是素数
源程序代码:
/* 2017年3月8日21:15:32 功能:判断一个数是否是素数 */ #include "stdio.h" int main () { char s[100] ="YES"; char s1[100] = "NO"; int n; printf ("Please enter a data: "); scanf ("%d",&n); for (int i = 2; i < n ; i++) { if (n % i != 0) continue; else { printf ("the result is %s ",s1); break; } } if(i == n) printf("the number is %s ",s); return 0; } /* 总结: 在VC++6.0中显示的结果: —————————————————————————— Please enter a data:9 the result is NO —————————————————————————— */
优化算法:
# include <stdio.h> int main(void) { int fun(int); //函数声明; int n; printf("素数判定,请输入一个整数:"); scanf("%d", &n); if(fun(n)) //函数返回值为1,为素数,否则不是素数; printf("%d是素数 ", n); else printf("%d不是素数 ", n); return 0; } int fun(int x) //函数可以在主函数内声明,但是不能在函数内再定义一个函数,否则出错; { int i; for(i=2; i<x; i++) { if(x%i == 0) //素数只能被1和他本身整除 break; } if(i == x) //当i==x,说明x%i(i<x)的所有值都不等于0,x就是素数; return 1; else return 0; }
扩展:用筛选法求1-100之间的素数
/* 2017年6月30日19:46:07 功能:用筛选法求1-100之间的素数 */ # include <stdio.h> # define N 100 int main(void) { int a[N], b[N]; //定义两个数组 int i, j, count = 0; for(i=1; i<N; i++) a[i] = 0; //初始化所有数 /*若筛中最小数的标志为0,则基为素数,将其存入素数数组b,素数个数+1*/ for(j=2; j<=N; j++) if(a[j-1] == 0) //没有排除的数值为还是0 { b[count] = j; for(i=j; i<=N; i=i+j) a[i-1] = 1; //将排除的数赋值为1(分别是2的倍数、3的倍数..到10的倍数的号) count++; } for(i=1; i<=count; i++) { printf("%-5d",b[i-1]); //每5个数为一组输出 if(i%5==0) printf(" "); } return 0; } /* 在VC++6.0中显示的结果为: ---------------- 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 ---------------- */