寻找100到n之间的素数

简介: 【6月更文挑战第23天】

寻找100到n之间的素数有多种方法,不同的编程语言可能在实现上有所差异,但基本思路是相似的。以下是一些常见的算法思路和方法:

试除法:这是最简单直接的方法,通过尝试将每个数除以从2开始的所有较小的数,直到该数的平方根。如果在这个范围内没有发现除了1和它本身之外的除数,则该数是素数。

优化的试除法:在试除法的基础上,可以只试除以2开始的素数,因为如果一个数不是素数,它必定有一个素数因子。此外,只需试除到该数的平方根即可。

埃拉托斯特尼筛法(Sieve of Eratosthenes):这是一种高效的算法,尤其适用于寻找一定范围内的所有素数。首先假设所有数都是素数,然后从最小的素数2开始,逐步筛去它们的倍数,剩下的就是素数。

埃拉托斯特尼筛法的优化版本:例如,只对奇数进行筛选,因为2是唯一的偶数素数。

线性筛法:这是埃拉托斯特尼筛法的一种变体,它使用一个数组来记录每个数字是否为素数,然后线性地遍历这个数组,对于每个素数,标记其倍数为非素数。

使用预先计算的素数表:如果n不是非常大,可以预先计算一个足够大的素数表,然后在这个表中查找100到n之间的所有素数。

C语言 - 试除法优化到平方根

#include <stdio.h>
#include <math.h>
#include <stdbool.h>

bool isPrime(int num) {
   
    if (num <= 1) return false;
    if (num <= 3) return true;
    if (num % 2 == 0 || num % 3 == 0) return false;
    for (int i = 5; i * i <= num; i += 6) {
   
        if (num % i == 0 || num % (i + 2) == 0)
            return false;
    }
    return true;
}

int main() {
   
    int n;
    printf("Enter the upper limit: ");
    scanf("%d", &n);
    for (int i = 100; i <= n; i++) {
   
        if (isPrime(i)) {
   
            printf("%d ", i);
        }
    }
    return 0;
}

Python - 埃拉托斯特尼筛法

def sieve_of_eratosthenes(n):
    primes = [True] * (n+1)
    p = 2
    while p * p <= n:
        if primes[p]:
            for i in range(p * p, n+1, p):
                primes[i] = False
        p += 1
    return [p for p in range(100, n+1) if primes[p]]

n = int(input("Enter the upper limit: "))
print("Prime numbers between 100 and", n, "are:", sieve_of_eratosthenes(n))

Java - 试除法

import java.util.*;

public class PrimeNumbers {
   
    public static boolean isPrime(int num) {
   
        if (num <= 1) return false;
        for (int i = 2; i <= Math.sqrt(num); i++) {
   
            if (num % i == 0) return false;
        }
        return true;
    }

    public static void main(String[] args) {
   
        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter the upper limit: ");
        int n = scanner.nextInt();
        for (int i = 100; i <= n; i++) {
   
            if (isPrime(i)) {
   
                System.out.print(i + " ");
            }
        }
    }
}

JavaScript - 试除法优化到平方根

function isPrime(num) {
   
    if (num <= 1) return false;
    for (let i = 2; i * i <= num; i++) {
   
        if (num % i === 0) return false;
    }
    return true;
}

let n = prompt("Enter the upper limit:");
for (let i = 100; i <= Number(n); i++) {
   
    if (isPrime(i)) {
   
        console.log(i);
    }
}

Go语言 - 埃拉托斯特尼筛法

package main

import (
    "fmt"
    "math"
)

func sieveOfEratosthenes(n int) []int {
   
    primes := make([]bool, n+1)
    for i := 2; i <= n; i++ {
   
        primes[i] = true
    }
    for p := 2; p <= int(math.Sqrt(float64(n))); p++ {
   
        if primes[p] {
   
            for i := p * p; i <= n; i += p {
   
                primes[i] = false
            }
        }
    }
    var primeNumbers []int
    for i, isPrime := range primes[100:] {
   
        if isPrime {
   
            primeNumbers = append(primeNumbers, i+100)
        }
    }
    return primeNumbers
}

func main() {
   
    var n int
    fmt.Print("Enter the upper limit: ")
    fmt.Scan(&n)
    primes := sieveOfEratosthenes(n)
    fmt.Println("Prime numbers between 100 and", n, "are:", primes)
}

请注意,这些代码示例仅用于演示目的,实际使用时可能需要根据具体环境和需求进行调整。

目录
相关文章
|
6月前
判断 101 到 200 之间的素数
判断 101 到 200 之间的素数。
43 0
求质数的几种方式
求质数的几种方式
|
21天前
|
机器学习/深度学习 算法 算法框架/工具
埃式质数筛及性质
【10月更文挑战第8天】本文介绍质数,或素数,指大于1且仅能被1和自身整除的自然数。它们在数学中有独特地位,如算术基本定理指出任何大于1的自然数可唯一分解为质数乘积。质数的寻找方法多样,包括试除法、埃拉托斯特尼筛法等,后者通过筛除合数高效找出质数。质数在密码学中尤为重要,如RSA加密算法依赖大质数的乘积安全性。此外,还有多种算法和理论,如欧拉筛法、费马小定理、梅森质数等,丰富了质数的研究领域。
49 1
|
12天前
两数之间的 Armstrong 数
【10月更文挑战第24天】两数之间的 Armstrong 数。
12 4
|
2月前
判断101到 200之间的素数
判断101到 200之间的素数。
39 9
|
6月前
判断101到200之间的素数
判断 101 到 200 之间的素数。
35 1
|
6月前
40.验证哥德巴赫猜想:一个大于2的偶数总可以分解成两个素数的和
40.验证哥德巴赫猜想:一个大于2的偶数总可以分解成两个素数的和
60 5
|
6月前
打印100~200之间的素数
打印100~200之间的素数
|
6月前
|
存储 Python
用函数实现求所有(50~100)之间素数的和
用函数实现求所有(50~100)之间素数的和
81 0