C语言

tech2026-09-21  1

时间:2020年9月4日 17:20:45

/*判断101-200之间有多少个素数,并输出所有素数及素数的个数。 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,      则表明此数不是素数,反之是素数。 另一种思路: 素数:大于1,并且除了1 和本身以外不能被其他数整除,这样的数为素数 编程:i > 1 && i % for( j = 2 ; j < i ;j ++) == 0 不是素数 反之为素数 */

说明: 为了区分两种代码执行的效率,我把101 ~ 200的范围给成了101 ~ 200000。 方法一 用时差不多要 5 秒。(算法抽象,需要调试 F11理解过程) 方法二 用时差不多要 11 秒左右。

-------------分界线---------------------

方法一:

/*判断101-200之间有多少个素数,并输出所有素数及素数的个数。 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,      则表明此数不是素数,反之是素数。 另一种思路: 素数:大于1,并且除了1 和本身以外不能被其他数整除,这样的数为素数 编程:i > 1 && i % for( j = 2 ; j < i ;j ++) == 0 不是素数 反之为素数 */ //时间:2020年9月4日 17:21:10 #include <stdio.h> #include <math.h> #include <stdlib.h> #include <time.h> int main(void) { int m, i, k, h = 0, leap = 1; printf("\n"); for (m = 101; m <= 200000; m++) // m 用来遍历 101到200之间的数 { k = sqrt(m); // double sqrt(double);说明:sqrt系Square Root Calculations(平方根计算) for (i = 2; i <= k; i++) { if (m % i == 0) { leap = 0; break; } } if (leap) // false取值0,true取值 1或者-1(补码) { printf("%-4d\t", m); h++; if (h % 10 == 0) // for循环执行到第10次,就换行;所以一行输出10个数 printf("\n"); } leap = 1; // 结束了第2个for循环后,初始化 leap = 1 } printf("\nThe total is %d\n", h); printf("\nThe duration is %lf s\n", ((double)clock() / CLOCKS_PER_SEC)); system("pause"); return; }

方法二:

#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int i, j; for (i = 101; i <= 200000; i++) { for (j = 2; j < i; j++) { if (i % j == 0) break; else if (j == i - 1) printf("%d\t", i); } } printf("\nThe duration is %lf s\n", (double)clock()/CLOCKS_PER_SEC); system("pause"); return; }
最新回复(0)