当前位置 : 主页 > 编程语言 > c语言 >

列出a到b之间的素数

来源:互联网 收集:自由互联 发布时间:2023-09-03
素数:除了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;
}


网友评论