-
概念解读 :
质数又被称为素数,是指一个大于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 <stdio.h>
#include <stdlib.h>
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 <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <stdbool.h>
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以内输出素数的所有见解,如果不同见解可以私信我