概念解读 :
质数又被称为素数,是指一个大于1的自然数,除了1和它自身外,不能被其它自然数整除,且其个数是无穷的。
思路分析:
对于代码大方向,我们可以直接主函数中写,也可以用可移植性高的自定义函数来写。
100以内样例输出示意
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
后面是大于100的素数,可以修改代码中的循环条件的范围来改变自己的输出
代码内容:
思路一:
#include #include int main() {int i ,j;//定义变量循环 printf("打印100以内所有素数:\n");for(i = 2;i <= 100; i++){//外循环从2遍历到100,可以修改范围输出不同范围内的素数 for(j = 2;j < i; j++){//内循环通过大于1小于自身的因数进行依次取余判断,直到相除没有余数,跳出循环。 if(i % j == 0){break;}}if(j == i){//这个判断是重点,意思是在前面的条件成立的前提下除数和被除数相等的才为素数,例如12有3×4,但是不相等,例如13只有当i==j是即i==j==13时候才能成立 printf("%d",i);}}return 0;}
代码分析:通过二重循环,外循环从2遍历到100,可以修改范围输出不同范围内的素数,内循环通过大于1小于自身的因数进行依次取余判断,直到相除没有余数,跳出循环。这个判断是重点,意思是在前面的条件成立的前提下除数和被除数相等的才为素数,例如12有3×4,但是不相等,例如13只有当i==j是即i==j==13时候才能成立 。
思路二:
#include #include #include #include bool isprime(int i)//判断是否是素数的自定义函数 {int j;for(j = 2; j < sqrt(i); j++){//for循环判断如果不是素数则返回0 if(i%j == 0){//如果在i的平方根范围内的所有数字都不能被整除就说//明这个数字是素数,但凡有一个能被整除那么这个数字就违背了素数的定义 return 0;}}return 1;//如果是素数则返回1 } int main() {int i ,j;printf("打印100以内所有素数:\n");for(i = 2;i <= 100; i++){//for循环遍历一个一个判断,如果是素数那么就打印出来,遍历的数字范围能被修改,输出不同范围的素数 if(isprime(i)){printf("%d ",i);}}return 0;}
代码分析:非素数一定是由两个数字相乘所得,所以另一种思路即为sqrt()函数对除数开平方根,对其开平方根后的数字对于素数来说一定是最大的平方根,一个数字分解为任意两个乘数一定是小于等于其开平方根的数值的,所以我们循环条件只需要小于这个数字的开平方根的数字即可;被除数则小于被判断数字的开方根的数字,最后经过判断,如果在有返回值的即为素数,这种方法可以使用可移植性较高的自定义函数完成。
以上就是我对100以内输出素数的所有见解,如果不同见解可以私信我