判断 素数 质数

本文提供了两种不同的算法实现来生成特定范围内的素数:一种使用VBA编写,适用于较小的数值范围;另一种采用C++实现,可以高效地处理更大的数据集。通过这两种方法,读者能够了解到如何有效地筛选出素数,并理解其背后的数学原理。
Public Function IsPrime(ByVal n As Integer) As Boolean
    If n < 4 Then Return True
    If n Mod 2 = 0 Then Return False
    Dim k As Integer = Math.Floor(Math.Sqrt(n))
    For i = 3 To k Step 2
        If n Mod i = 0 Then Return False
    Next
    Return True
End Function




快速生成n以内的素数

Public Function GetPrime(ByVal n As Long) As Long()
    Dim arr(n + 1) As Boolean
    For i As Long = 2 To n / 2
        For j As Long = 2 To i
            Dim r As Long = i * j
            If r > n Then Exit For
            If Not arr(r) Then arr(r) = True
        Next
    Next
    Dim list As New List(Of Long)
    For i As Long = 2 To n
        If Not arr(i) Then list.Add(i)
    Next
    Return list.ToArray
End Function

http://acm.buaa.edu.cn/problem/187/


#include <iostream>
#include <cmath>
using namespace std;
unsigned short p[1000];

int main(void)
{
	bool is_prime;
	int c=2,k;
	p[0]=2;p[1]=3;
	for(int i=5;i<7920;i+=2)
	{
		is_prime=true;
		k=sqrt((double)i)+1;
		for(int j=1;j<c-1;j++)
		{
			if(p[j]>=k){break;}
			if(i%p[j]==0){is_prime=false;break;}
		}
		if(is_prime){p[c]=i;c++;}
	}
	int n;
	while(cin>>n)
	{cout<<p[n-1]<<endl;}
	return 0;
}



### Python 中判断质数素数)的方法 #### 枚举法 枚举法是一种简单直观的方式,通过遍历可能的因子来验证一个给定的整数是否为质数。对于小于2的数值直接返回`False`,因为它们不是质数。对于大于等于2的情况,则尝试以从2到该数平方根之间的每一个整数,如果存在能被整的情形则说明这个数不是质数。 ```python def is_prime_enum(num): if num < 2: return False for i in range(2, int(num ** 0.5) + 1): if num % i == 0: return False return True ``` 这种方法的时间复杂度大约为O(sqrt(n))[^2]。 #### 厄拉多塞筛法【埃氏筛】 当需要找出一定范围内所有的质数时,可以采用厄拉多塞筛法。此方法创建了一个布尔数组标记哪些位置上的索引代表的是质数。初始状态下假设所有数字都是质数,随后逐步排掉那些能够被更小质数的位置直到完成整个范围内的筛选过程。 ```python def sieve_of_eratosthenes(limit): primes = [] is_prime = [True] * (limit + 1) p = 2 while p * p <= limit: if is_prime[p]: for i in range(p * p, limit + 1, p): is_prime[i] = False p += 1 for p in range(2, limit + 1): if is_prime[p]: primes.append(p) return primes ``` 这种算法效率较高,在处理较大区间内寻找多个质数的任务上表现良好[^1]。 #### 线性筛 线性筛是对传统厄拉多塞筛的一种优化版本,它能够在乎线性的运行时间内找到指定上限以内所有的质数。其核心思想在于利用已知的小质数去快速过滤掉非质数候选者,并且只对每个合数做一次操作从而减少了重复劳动。 ```python def linear_sieve(limit): primes = [] smallest_prime_factor = [i for i in range(limit + 1)] for i in range(2, limit + 1): if smallest_prime_factor[i] == i: primes.append(i) j = 0 while j < len(primes) and primes[j] <= smallest_prime_factor[i] and i * primes[j] <= limit: smallest_prime_factor[i * primes[j]] = primes[j] j += 1 return primes ``` 上述三种方式分别适用于不同场景下的质数检测需求,可以根据具体的应用环境选择最合适的技术方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值