c语言 素数01

#include<stdio.h>
int main()
{
	/*int a=10,b=10;
	printf("a++=%d\n",a++);
	printf("%d\n",a);
	printf("++b=%d\n",++b);
	printf("%d",b);
	//printf(" hello word");*/
	
	int i,a;
	scanf ("%d",&i);
	for(a=2;a<i;a++){
		if (i%a==0){
		break;
		}
	}
	
	
	if(a<i){
	    printf("不是素数\n");
		} else{
		printf("是素数\n");
		} 	
	return 0;
} 

判断输入一个数字 是否是素数 

isPrime 会更好一点  但是 我愣是没看懂啥意思  可能是晚上回来 脑子不转了    如果有大神看到这篇的话  麻烦告诉我 isPrime怎么用  还有 我的写法 与isPrime 有什么区别  谢谢 (收下 小白的膝盖  嘻嘻)

### C语言实现素数判断算法 素数是指除了1和它本身之外,不能被其他任何正整数整除的数。在C语言中,可以通过循环和条件语句来实现素数判断的算法。以下是一个素数判断算法示例[^2]: ```c #include <stdio.h> #include <stdbool.h> // 定义素数判断函数 bool isPrime(int n) { if (n <= 1) { return false; // 小于等于1的数不是素数 } for (int i = 2; i * i <= n; i++) { // 只需检查到sqrt(n) if (n % i == 0) { return false; // 如果能被i整除,则不是素数 } } return true; // 否则是素数 } int main() { int num; printf("请输入一个整数:"); scanf("%d", &num); if (isPrime(num)) { printf("%d 是素数。\n", num); } else { printf("%d 不是素数。\n", num); } return 0; } ``` 上述代码通过定义一个`isPrime`函数判断给定的整数是否为素数。核心思想是使用循环从2开始,检查是否存在能够整除该数的因子。如果存在,则该数不是素数;否则,它是素数[^2]。 此外,为了提高效率,循环只需运行到`sqrt(n)`即可,因为如果一个数有因子对`(a, b)`,其中`a * b = n`,那么至少有一个因子小于或等于`sqrt(n)`[^3]。 ### 算法优化 对于更大的范围内的素数判断,可以采用**埃拉托色尼筛法(Sieve of Eratosthenes)**来生成一定范围内的所有素数。这种方法的时间复杂度为O(n log log n),适合处理大量数据[^4]。 以下是基于埃拉托色尼筛法的C语言实现: ```c #include <stdio.h> #include <stdbool.h> #include <string.h> void sieveOfEratosthenes(int maxNum) { bool isPrime[maxNum + 1]; memset(isPrime, true, sizeof(isPrime)); // 初始化所有数为素数 isPrime[0] = isPrime[1] = false; // 0和1不是素数 for (int p = 2; p * p <= maxNum; p++) { if (isPrime[p]) { for (int multiple = p * p; multiple <= maxNum; multiple += p) { isPrime[multiple] = false; // 将p的倍数标记为非素数 } } } printf("以下是从1到%d的所有素数:\n", maxNum); for (int i = 2; i <= maxNum; i++) { if (isPrime[i]) { printf("%d ", i); } } printf("\n"); } int main() { int maxNum; printf("请输入一个最大范围值:"); scanf("%d", &maxNum); sieveOfEratosthenes(maxNum); return 0; } ``` 此代码利用布尔数组`isPrime`记录每个数是否为素数,并通过逐步排除非素数的方式筛选出所有素数[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值