判断101-200之间有多少个素数

本文介绍了如何通过编程方法判断并输出101到200之间的素数。

题目:判断101-200之间有多少个素数,并输出所有素数。




	/*********************************

	        pclvmm

	        prime

	        2014-01-13 19:06

	*********************************/

	

	

	#include <stdio.h>

	#include <math.h>

	

	int is_prime(int n)

	{

	        int i,t;

	

	        if( n % 2){ //这里对偶数进行判断后可以减少很多时间

	                t = sqrt(n);

	                for(i = 2; i < t; i++){

	                        if(!(n % i))

	                                return 0;

	                }

	                return 1;

	        }else

	                return 0;

	}

	

	int main(int argc, char * argv)

	{

	        int i;

	

	        for( i = 101; i < 200; i++){

	                if(is_prime(i))

	                        printf("%6d",i);

	        }

	        printf("\n");

	

	        return 0;

	}

	~            

	
### 题目重述 编写一个C语言程序,统计并输出101200之间多少素数,并打印出每一个素数--- ### 详解 要判断一个数是否为素数,需满足:**只能被1和自身整除的大于1的自然数**。 我们遍历从101200之间的每一个整数,对每个数 $ n $,检查是否存在从2到 $ \sqrt{n} $ 范围内的因子。若不存在,则为素数--- ```c #include <stdio.h> #include <math.h> // 判断一个数是否为素数的函数 int isPrime(int n) { if (n <= 1) return 0; // 小于等于1不是素数 if (n == 2) return 1; // 2是素数 if (n % 2 == 0) return 0; // 其他偶数不是素数 // 只需检查奇数因子到 sqrt(n) for (int i = 3; i <= (int)sqrt(n); i += 2) { if (n % i == 0) { return 0; // 发现因子,不是素数 } } return 1; // 是素数 } int main() { int count = 0; printf("101200之间素数有:\n"); for (int num = 101; num <= 200; num++) { if (isPrime(num)) { printf("%d ", num); count++; } } printf("\n总共有 %d 个素数。\n", count); return 0; } ``` --- ### 代码解析 1. **主函数逻辑**: - 使用 `for` 循环遍历101200的所有整数; - 对每个数调用 `isPrime()` 函数判断是否为素数- 若是则打印并计数器 `count++`。 2. **素数判断优化**: - 排除小于等于1的数; - 单独处理2; - 排除偶数; - 仅用奇数从3开始试除至 $ \sqrt{n} $,减少计算量。 3. **输出格式**: - 打印所有符合条件的素数- 最后输出总数。 --- ### 知识点(列出解答该问题需要的知识点) 1. **素数的数学定义与判定方法** 大于1且仅有两个因数(1和自身)的数。 2. **循环嵌套与边界优化** 外层遍历区间,内层试除到 $ \sqrt{n} $,提升效率。 3. **函数封装思想** 将判断逻辑独立成函数 `isPrime()`,增强可读性和复用性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值