给定一个正整数 n n,请你求出 1 1∼ n n 中质数的个数。c语言
时间: 2024-11-25 17:19:54 浏览: 33
在C语言中,求解1到n之间的质数个数,你可以使用埃拉托斯特尼筛法(Sieve of Eratosthenes)。这个算法的基本思想是从2开始,将每个数的倍数标记为合数,直到到达平方根。剩下的未被标记的数就是质数。
以下是简单的C语言代码实现:
```c
#include <stdio.h>
#include <stdbool.h>
// Function to count primes up to n
int countPrimes(int n) {
bool isPrime[n+1];
memset(isPrime, true, sizeof(isPrime)); // 初始化所有数字为质数
for (int p = 2; p*p <= n; p++) { // 遍历从2到√n
if (isPrime[p]) { // 如果p是质数
for (int i = p * p; i <= n; i += p) {
isPrime[i] = false; // 将p的倍数标记为合数
}
}
}
int primeCount = 0;
for (int i = 2; i <= n; i++) {
if (isPrime[i])
primeCount++;
}
return primeCount;
}
int main() {
int n;
printf("Enter a positive integer n: ");
scanf("%d", &n);
int primeCount = countPrimes(n);
printf("Number of primes from 1 to %d is: %d\n", n, primeCount);
return 0;
}
```
用户运行此程序时,输入一个正整数n,程序会计算并打印出1到n之间质数的数量。记得验证用户输入的是正整数。
阅读全文