素数:除了1和它本身以外不再有其它因数的自然数 (只能被1和它本身整除 ) 1.错误写法 #define _CRT_SECURE_NO_WARNINGS 1#includestdio.hvoid list_prime(int a, int b) {// 列出a到b之间的每个数for (int i
素数:除了1和它本身以外不再有其它因数的自然数(只能被1和它本身整除)
1.错误写法
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void list_prime(int a, int b) {
// 列出a到b之间的每个数
for (int i = a; i < b + 1; i++) {
//把列出的每一个数都除以2到y-1,看余数是否为0
for (int k = 2;k < ;k++) {
if (i % k == 0)
break;//跳出距离最近的for循环
}
printf("%d ", i);
}
}
int main() {
int a = 0;
int b = 0;
scanf("%d%d", &a, &b);
list_prime(a, b);
return 0;
}
错误原因:不管第9行的break是否执行(不管i是否能被整除),最终都会执行第11行printf。
2.正确写法
把判断语if放在第一个for循环中,需要再引入一个is_prime函数(因为if需要一个判断条件,而这个判断条件的值位于第二个for循环中,所以引入函数可以完美解决这个问题)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void list_prime(int a, int b) {
// 列出a到b之间的全部数字,再进行判断
for (int i = a; i < b + 1; i++) {
if (i == 1)//1不是素数
continue;
if (is_prime(i) == 1)
printf("%d ", i);
}
}
//判断单个数字是否为素数
int is_prime(int i) {
for (int k = 2;k < i;k++) {
if (i%k==0)
return 0;
}
return 1;
}
int main() {
int a = 0;
int b = 0;
scanf("%d%d", &a, &b);
list_prime(a, b);
return 0;
}