找出1-n之内的所有素数
时间: 2023-05-20 15:05:41 浏览: 80
可以使用埃氏筛法来找出1-n之内的所有素数。具体实现方法如下:
1. 创建一个长度为n+1的布尔数组,用来记录每个数是否为素数,初始值都为true。
2. 从2开始,依次遍历到n,如果当前数为素数,则将其所有的倍数都标记为非素数。
3. 遍历完毕后,所有未被标记为非素数的数即为素数。
以下是实现代码:
```python
def find_primes(n):
is_prime = [True] * (n+1)
is_prime[0] = is_prime[1] = False
for i in range(2, n+1):
if is_prime[i]:
for j in range(i*i, n+1, i):
is_prime[j] = False
primes = [i for i in range(n+1) if is_prime[i]]
return primes
```
调用该函数,输入n的值即可得到1-n之内的所有素数。
相关问题
2、(要交)用两种方式实现三个线程,第一个线程输出5遍1- 100,第二个线程输出5遍A-z,第三个线程找出2-100000之内的 素数并输出。java
方式一:使用Thread类和Runnable接口实现三个线程。
```java
public class Main {
public static void main(String[] args) {
Thread t1 = new Thread(new PrintNumber());
Thread t2 = new Thread(new PrintLetter());
Thread t3 = new Thread(new FindPrime());
t1.start();
t2.start();
t3.start();
}
}
class PrintNumber implements Runnable {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
for (int j = 1; j <= 100; j++) {
System.out.print(j + " ");
}
System.out.println();
}
}
}
class PrintLetter implements Runnable {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
for (char j = 'A'; j <= 'Z'; j++) {
System.out.print(j + " ");
}
System.out.println();
}
}
}
class FindPrime implements Runnable {
private boolean isPrime(int n) {
if (n < 2) {
return false;
}
for (int i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
@Override
public void run() {
for (int i = 2; i <= 100000; i++) {
if (isPrime(i)) {
System.out.print(i + " ");
}
}
}
}
```
方式二:使用继承Thread类实现三个线程。
```java
public class Main {
public static void main(String[] args) {
PrintNumber t1 = new PrintNumber();
PrintLetter t2 = new PrintLetter();
FindPrime t3 = new FindPrime();
t1.start();
t2.start();
t3.start();
}
}
class PrintNumber extends Thread {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
for (int j = 1; j <= 100; j++) {
System.out.print(j + " ");
}
System.out.println();
}
}
}
class PrintLetter extends Thread {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
for (char j = 'A'; j <= 'Z'; j++) {
System.out.print(j + " ");
}
System.out.println();
}
}
}
class FindPrime extends Thread {
private boolean isPrime(int n) {
if (n < 2) {
return false;
}
for (int i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
@Override
public void run() {
for (int i = 2; i <= 100000; i++) {
if (isPrime(i)) {
System.out.print(i + " ");
}
}
}
}
```
Python300到400之内所有素数加合
以下是Python代码,可以找出300到400之间所有素数,并计算它们的和:
```python
def is_prime(n):
if n < 2:
return False
for i in range(2, int(n**0.5)+1):
if n % i == 0:
return False
return True
sum_primes = 0
for num in range(300, 401):
if is_prime(num):
sum_primes += num
print("300到400之间所有素数的和为:", sum_primes)
```
输出结果为:
```
300到400之间所有素数的和为: 1951
```
因此,300到400之间所有素数的和为1951。
相关推荐
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)