什么是素数?
素数_一般指_质数 。_质数_是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
曾称质数。一个大于1的正整数,如果除了1和它本身以外,不能被其他正整数整除,就叫素数。
要求:输出1~200之间的所有素数。
思路:先定义一个数组,由于不清楚200内素数有多少个,不知道定义多大,但可以肯定不超过200。如果稍微判断,可以肯定不超过100个,因为除了2,所有偶数都不是素数,都可以被2整除。所以,先定义一个数组存放素数,大小100就够,即int a[100]。
循环判断3-199之间的所有数 i ,每次将其循环与2到当前数本身减去1,即 i % j 取余,
如遇到一个可以被整除的,那么i就不是素数,将flag赋值为0,标志当前的i不为素数,以便后面进行判断。且不必再进行判断后面的j了,直接break跳出内循环。
初步代码如下:(有错误)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #include <stdio.h> int main () { int a[100 ], flag = 1 ; for (int i = 3 ; i < 200 ; i++) { for (int j = 2 ; j < i; j++) { if (i % j == 0 ) { flag = 0 ; break ; } } if (flag == 1 ) { int k = 0 ; a[k] = i; k++; } } for (int i = 0 ; i < 100 ; i++) { printf ("%d " , a[i]); } return 0 ; }
修正代码如下
注意1、两次循环的初始条件,为什么?
2、flag及k的作用,默认值。
3、每完成一次外循环,就需要将flag重新赋值为1,为什么?
因为循环是默认在flag=1的条件下进行的,循环内的语句可能改变flag的值,再下次循环默认为0的话,将会得出错误结果。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 #include <stdio.h> int main () { int a[100 ], flag = 1 , k = 1 ; a[0 ] = 2 ; for (int i = 3 ; i < 200 ; i++) { for (int j = 2 ; j < i; j++) { if (i % j == 0 ) { flag = 0 ; break ; } } if (flag == 1 ) { a[k] = i; k++; } flag = 1 ; } for (int i = 0 ; i < k; i++) { printf ("%d " , a[i]); } return 0 ; }
略微修改
输入一个整数,判断是否为素数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include <stdio.h> int main () { int a, flag = 1 ; printf ("请输入一个整数:" ); scanf ("%d" , &a); for (int j = 2 ; j < a; j++) { if (a % j == 0 ) { flag = 0 ; printf ("%d不是一个素数,它能被%d整除" , a, j); break ; } } if (flag == 1 ) { printf ("%d是一个素数" , a); } return 0 ; }