寻找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)
}

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

目录
相关文章
|
SQL 关系型数据库 MySQL
【MySQL入门到精通-黑马程序员】MySQL基础篇-SQL概述及DDL
(精度指数的所有位数;标度指小数点后数的位数) 字符串类型
248 0
|
Linux Shell 文件存储
端口排查步骤-7680端口分析-Dosvc服务
对通过服务启动的进程查找主进程
7053 0
|
XML 移动开发 Java
流量分析之shiro、behinder
流量分析涉及Shiro和Behinder,揭示了HTTP流量模式。Shiro的Cookie值经过AES和Base64双重加密,可使用特定工具(如BTEAM-SHIRODECRYPTER)解密。分析中提到了使用TOP100密钥进行解密,并展示了部分解密内容,其中包括命令执行,如`c: cmd.exe`。关注点在于通过筛查包含&quot;/admin/&quot;的HTTP请求,追踪可能的黑客攻击。解密内容显示攻击者尝试在`/docs/3.jsp`写入webshell。通过进一步的流量筛选和解密,例如使用工具DecodeSomeJSPWebshell
328 3
流量分析之shiro、behinder
|
存储 网络协议 前端开发
基于开源IM即时通讯框架MobileIMSDK:RainbowChat v11.7版已发布
Android端主要更新内容: 1)[优化] 优化了首页“消息”列表中单聊类型未正确同步时的收发消息和点击后的处理逻辑; 2)[优化] 优化了首页“消息”列表中同一好友和陌生人会话不能自动合并的问题;
276 2
|
数据采集 编解码 算法
Github | 推荐一个Python脚本集合项目
Github | 推荐一个Python脚本集合项目
296 5
|
10月前
|
安全 虚拟化 异构计算
GPU安全容器面临的问题和挑战
本次分享由阿里云智能集团弹性计算高级技术专家李亮主讲,聚焦GPU安全容器面临的问题与挑战。内容分为五个部分:首先介绍GPU安全容器的背景及其优势;其次从安全、成本和性能三个维度探讨实践中遇到的问题及应对方案;最后分享GPU安全容器带状态迁移的技术路径与应用场景。在安全方面,重点解决GPU MMIO攻击问题;在成本上,优化虚拟化引入的内存开销;在性能上,提升P2P通信和GPU Direct的效率。带状态迁移则探讨了CRIU、Hibernate及VM迁移等技术的应用前景。
|
机器学习/深度学习 人工智能 算法
AI入门必读:Java实现常见AI算法及实际应用,有两下子!
本文全面介绍了人工智能(AI)的基础知识、操作教程、算法实现及其在实际项目中的应用。首先,从AI的概念出发,解释了AI如何使机器具备学习、思考、决策和交流的能力,并列举了日常生活中的常见应用场景,如手机助手、推荐系统、自动驾驶等。接着,详细介绍了AI在提高效率、增强用户体验、促进技术创新和解决复杂问题等方面的显著作用,同时展望了AI的未来发展趋势,包括自我学习能力的提升、人机协作的增强、伦理法规的完善以及行业垂直化应用的拓展等...
1605 3
AI入门必读:Java实现常见AI算法及实际应用,有两下子!
|
存储 JSON 监控
JavaScript 逆向基础篇:浏览器调试与 Hook 技术
JavaScript 逆向基础篇:浏览器调试与 Hook 技术
1157 1
|
前端开发 搜索推荐 UED
单页面应用(SPA)与多页面应用(MPA)的区别及优缺点
单页面应用(SPA)与多页面应用(MPA)的区别及优缺点
367 1