素数的定义
1、素数又叫质数。素数,指的是“大于1的整数中,只能被1和这个数本身整除的数”。
2、素数也可以被等价表述成:“在正整数范围内,大于1并且只有1和自身两个约数的数”
求100-200之间的素数
提示:以下是本篇文章正文内容,下面案例可供参考
这里给出一个题目,以该题为例:
求100-200之间的素数,并算出该范围内有多少个素数?
第一种方案
# include <stdio.h> int main() { int i; //先求出100-200之间的所有的数 //这里给出一个for循环 int count = 0; for(i = 100; i < 200; i++) { int j; //定义一个变量j用来表示因子 for( j = 2; j < i ;j++) //用 2 到 i-1 之间的因子去试除i { if(i % j ==0) { break; //若能整除,则说明一定不是素数,跳出循环 } } //当上一个for循环任意一个数i都不能被j(2到i-1)整除,也即j==i时,跳出for循环 if (j == i) //此时因子i等于一个数本身,则说明是素数 { count++; printf("%d ",i);//打印素数 } } printf("\ncount = %d\n",count);//所有素数求出来之后,打印素数的个数 return 0; }
第二种方案
此方案与上一种方案类似,定义了一个flag用来标记,为1是素数,为0则表示不是素数。
# include <stdio.h> int main() { int i; //先求出100-200之间的所有的数 //这里给出一个for循环 int count = 0; for(i = 100; i < 200; i++) { int j; //定义一个变量j用来表示因子 int flag = 1;//此时定义一个flag标记,表示假设i是素数 for( j = 2; j < i ;j++) //用 2 到 i-1 之间的因子去试除i { if(i % j ==0) { flag = 0;若能整除,则说明一定不是素数,把flag置为0 break; } } //当上一个for循环任意一个数i都不能被j(2到i-1)整除,也即j==i时,跳出for循环 if (flag == 1) //此时判断如果flag还是为1,则说明i是素数 { count++; printf("%d ",i);//打印素数 } } printf("\ncount = %d\n",count);//所有素数求出来之后,打印素数的个数 return 0; }
第三种方案
# include <stdio.h> # include <math.h> int main() { int i; //先求出100-200之间的所有的数 //这里给出一个for循环 int count = 0; for(i = 101; i < 200; i += 2) // 因为偶数一定不是素数,这里缩小范围,在奇数中去找素数 { int j; //定义一个变量j用来表示因子 int flag = 1;//此时定义一个flag标记,表示假设i是素数 //假设一个数m= a*b,那么这个数m它的因子a和b中一定至少有一个因子小于等于m的开平方数 //拿12这个数来说 它的因子所有表示如下: 12=1*12=2*6=3*4=4*3=6*2=12*1 //12的开平方数是2√3(2倍的根3), 2√3是大于3小于4的,那么用1,2,3去试除12之后,那么4,6,12就没必要再去试除12了 //所以这里的因子范围给到 3 到 sqrt(i) ,sqrt()是C语言的一个库函数,用来求给定值的平方根,需要引用头文件<math.h> for( j = 2; j <= sqrt(i) ;j++) { if(i % j == 0) { flag = 0;若能整除,则说明一定不是素数,把flag置为0 break; } } //当上一个for循环任意一个数i都不能被j(2到i-1)整除,也即j==i时,跳出for循环 if (flag == 1) //此时判断如果flag还是为1,则说明i是素数 { count++; printf("%d ",i);//打印素数 } } printf("\ncount = %d\n",count);//所有素数求出来之后,打印素数的个数 return 0; }