用埃式筛法求质数c++
时间: 2023-11-18 07:16:18 浏览: 47
埃拉托斯特尼筛法(Sieve of Eratosthenes)是一种用于求解质数的算法。以下是使用Python实现埃拉托斯特尼筛法的代码:
```python
def sieve_of_eratosthenes(n):
primes = [True] * (n+1)
primes[0] = primes[1] = False
p = 2
while p * p <= n:
if primes[p]:
for i in range(p * p, n+1, p):
primes[i] = False
p += 1
prime_numbers = []
for i in range(2, n+1):
if primes[i]:
prime_numbers.append(i)
return prime_numbers
c = 1000 # 假设我们要求1000以内的所有质数
primes = sieve_of_eratosthenes(c)
print(primes)
```
这段代码将打印出1000以内的所有质数。你可以将变量`c`设置为你想要求解的质数的范围。
相关问题
埃氏筛法c++
以下是C++实现的埃氏筛法,可以用于求解素数:
```c++
#include <iostream>
#include <vector>
using namespace std;
vector<bool> sieve_of_eratosthenes(int n) {
vector<bool> is_prime(n + 1, true);
is_prime[0] = is_prime[1] = false;
for (int i = 2; i * i <= n; ++i) {
if (is_prime[i]) {
for (int j = i * i; j <= n; j += i) {
is_prime[j] = false;
}
}
}
return is_prime;
}
int main() {
int n;
cin >> n;
vector<bool> is_prime = sieve_of_eratosthenes(n);
for (int i = 0; i <= n; ++i) {
if (is_prime[i]) {
cout << i << " ";
}
}
return 0;
}
```
输入一个正整数n,输出小于等于n的所有素数。其中is_prime[i]表示i是否为素数,初始化为true。从2开始,如果is_prime[i]为true,则将i的倍数is_prime[j](j>=i*i且j<=n)全部标记为false,表示它们为合数。最后遍历is_prime数组,输出所有值为true的下标即可。
请帮我用c++埃氏筛法写一个筛素数
好的,以下是用C语言实现埃氏筛法的代码,可以筛选出小于等于给定数值的所有素数:
```c
#include <stdio.h>
#define MAX_N 1000000
int is_prime[MAX_N + 1];
int main()
{
int n, count = 0;
scanf("%d", &n);
for (int i = 0; i <= n; i++)
is_prime[i] = 1;
is_prime[0] = is_prime[1] = 0;
for (int i = 2; i <= n; i++)
{
if (is_prime[i])
{
count++;
for (int j = i * 2; j <= n; j += i)
is_prime[j] = 0;
}
}
printf("小于等于%d的素数个数为%d\n", n, count);
return 0;
}
```
希望能帮到您,有什么其它问题可以直接问我哦。