C语言之计算100-200之间的素数(试除法)

该博客探讨了如何使用C语言通过试除法找出100到200之间的素数。文中提到了两种思路,一是判断整数i是否能被2到i-1之间的整数整除,二是优化方法,只检查2到i之间的整数,同时排除偶数。博主通过举例说明非素数的因子特点,并指出这是个人学习笔记,欢迎指正。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//问题:计算100-200之间的素数
//素数:指除了 1 和它本身以外,不能被任何整数整除的数,例如17就是素数,因为它不能被 2~16 的任一整数整除。

思路1: 判断一个整数 i 是否是素数,只需把 i 被 2 ~ i-1 之间的每一个整数去除,如果都不能被整除,那么 i 就是一个素数。

思路2: i 不必被 2 ~ i-1 之间的每一个整数去除,只需被 2 ~ i \sqrt i i 之间的每一个整数去除就可以了。如果 i 不能被 2 ~ i \sqrt i i 之间任一整数整除,i 必定是素数。除此我们知道偶数一定不是素数,去除所求范围中的偶数程序运行效率会更加提高。

9   ->   3*3
12   ->   2*6 或 3*4
15    ->  3*5
16    ->   2*8 或 4*4
解释:随意列举一些非素数,就会发现这些数的因子(除去1)至少存在一个小于等于其自身开平方(sqrt())

//思路 1:
#include <stdio.h>

int main(void){
	int i, j, count = 0;
	for (i = 100; i <= 200; i++){ // i 从 100 -> 200递增
		for (j = 2; j < i; j++){ // 判断 i 能否被 [2,i-1] 之间任一数整除
			if (i%j == 0) break; // 一旦i能被整除则立即跳出循环
		}
		if (j == i) {
			printf("%d ", i); // 若i为素数,则j最终的结果一定等于 j+1 = i
			count++; // 计算素数的个数
		}
	}
	printf("共%d个素数\n", count);
	return 0;
}
//思路 2:
#include <stdio.h>
#include <math.h>

int main(){
	int i = 101, j, count = 0; //直接从 i = 101开始,注意j为int类型
	for (; i <= 200; i += 2){ //i += 2,排除[100,200]之间偶数
		/*取i中间值。也可以使用 i/2 ……
		  只需要判断在 [3,(int)sqrt(i)] 无法被整数就说明是素数
		*/
		for (j = 3; j <= sqrt(i); j++){ 
			if (i % j == 0) break; //能否被整除
		}
		if (j > sqrt(i)) { //sqrt(i)类型为double
			printf("%d ", i);
			count++; //计数器
		}
	}
	printf("共%d个素数\n", count);
	return 0;
}

提示:本文为我个人学习笔记,皆纯手爪书写,如有错误请指教,转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值