用C语言实现筛法求素数,n从键盘输入,输出小于n的所有素数,即依次删除2的倍数,3的倍数,根号n的倍数
时间: 2024-05-20 09:17:19 浏览: 148
#include <stdio.h>
#include <math.h>
int main() {
int n, i, j;
printf("请输入一个正整数n:");
scanf("%d", &n);
// 声明并初始化一个数组,用于存储是否为素数的标记
int is_prime[n+1];
for (i = 2; i <= n; i++) {
is_prime[i] = 1; // 初始化为1,表示是素数
}
int sqrt_n = sqrt(n); // 根号n
// 依次删除2的倍数,3的倍数,...,根号n的倍数
for (i = 2; i <= sqrt_n; i++) {
if (is_prime[i]) { // 如果i是素数
for (j = i*i; j <= n; j += i) { // 删除i的倍数
is_prime[j] = 0;
}
}
}
// 输出小于n的所有素数
printf("小于%d的素数有:\n", n);
for (i = 2; i <= n; i++) {
if (is_prime[i]) {
printf("%d ", i);
}
}
printf("\n");
return 0;
}
相关问题
用C语言实现筛法求素数,输出小于的所有素数,即依次删除2的倍数,3的倍数,根号n的倍数
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main() {
int n;
printf("Please enter a positive integer n: ");
scanf("%d", &n);
// 初始化标记数组
int *is_prime = (int*)malloc((n+1)*sizeof(int));
for (int i = 2; i <= n; i++) {
is_prime[i] = 1;
}
// 筛法求素数
int limit = sqrt(n);
for (int i = 2; i <= limit; i++) {
if (is_prime[i]) {
for (int j = i*i; j <= n; j += i) {
is_prime[j] = 0;
}
}
}
// 输出素数
printf("The prime numbers less than or equal to %d are:\n", n);
for (int i = 2; i <= n; i++) {
if (is_prime[i]) {
printf("%d ", i);
}
}
printf("\n");
free(is_prime);
return 0;
}
```
c语言用筛法求出n以内的素数,n由键盘输入
好的,我可以帮你解答这个问题。下面是C语言代码:
```c
#include <stdio.h>
int main() {
int n, i, j;
printf("请输入一个正整数n:");
scanf("%d", &n);
int prime[n + 1];
for (i = 2; i <= n; i++) {
prime[i] = 1; // 初始化
}
for (i = 2; i <= n; i++) {
if (prime[i]) {
for (j = i + i; j <= n; j += i) {
prime[j] = 0; // 不是素数
}
}
}
printf("%d以内的素数有:", n);
for (i = 2; i <= n; i++) {
if (prime[i]) {
printf("%d ", i);
}
}
printf("\n");
return 0;
}
```
这里使用的是筛法求素数。首先,我们定义一个数组`prime`,用来标记每个数字是否为素数。初始化时,我们将`prime`数组中的所有元素都置为1,表示它们都是素数。然后,我们从2开始遍历到n,如果发现一个数字i是素数,那么它的倍数j(j > i)就不是素数。因此,我们将所有i的倍数j的`prime[j]`标记为0,表示它们不是素数。最后,我们遍历一遍`prime`数组,输出所有值为1的下标,即为n以内的素数。
希望这个答案能够帮助到你!
阅读全文