求质数是有许许多多算法的,毕竟这也是一个比较久远的问题了。而目前求质数的算法在现在更多地要求高效,于是各种算法都发展起来了。。。。。。。。。。。。。。
首先,我们容易想到的是:从2开始遍历,然后求他是否有除自己和1之外的因子。。。
然后我们可能会想到从3开始只遍历奇数。。。。。。。。。。。。
再我们可能想到了从2遍历到当前测试数的根号2向下取整,这排除了比较多的不可能因子。。。
除了遍历的方法,我们也可以想到,将得到的质数放入一个质数数组中,然后直接遍历该质数数组来判断是否质数。。
当然遍历上限十分之大的时候,我们就需要一些新算法了。我就取其中的一个算法来试验,那就是Miller&Rabin算法:
这个算法的核心是一个质数定理:费马定理 : 若一个正整数n,满足(1~n-1)之内任意一个数a
.使得 (a^(n-1))%n=1,则n为素数。。
当然,光靠这个定理是很看计算机的性能的。所以就需要一点改良:
Rabin-Miller素数测试:
通过在n的a值范围内取一定量的随机数,若都满足费马定理。那么在一定的误差内判定n是一个素数。
他的优点是算法十分快速,缺点是有一定的误差。但是可以通过添加一些条件或者改变参数来减小误差。
********************************************下面是代码*****************************************************
#include<iostream>
#include<math.h>
#include<stdlib.h>
#include<time.h>
using namespace std;
#define COUNT 100 //COUNT即测试的次数
bool getModel(int a,int n){
int t=n-1;
int cause=a;
while(--t){
cause=(cause*a)%n;
}
return cause==1;
}
bool judge(int n){
if(n==2)return true;
if(n>=3&&n%2){
int a;
srand(time(0));//生成种子
for(int i=0;i<COUNT;i++){ //随机40次 费马定理检验:
a=static_cast<int>(n*rand()/(RAND_MAX+1));//随机取到a值
if(a==1||a==0)a=2;
return getModel(a,n);
}
return true;
}
return false;
}
int main(){
int num=1;
int GOON;
cin>>GOON;
while(GOON!=0){
int ceil=num+100;
for(num;num<ceil;num++){
if(judge(num)){
cout<<num<<"是一个质数。"<<endl;
}
}
cin>>GOON;
}
system("pause");
return 0;
}
好了,我们来看看效果怎么样吧(下面的图是从1到3000的质数用此算法算出来的,颜色代表误差)
由下可见COUNT=100时,1-3000的质数有10个误差,还算好,但是速度很快。不设置条件的话直接就到80000以上了····
误差可以通过一些条件的加强来判断,比如我将COUNT设置为2000.。。。。
速度几乎和100一样快...
相关推荐
时间片轮转(Round Robin, RR)是一种进程调度算法,主要应用于分时系统,目的是确保所有进程都能获得一定的处理机时间。在这个算法中,系统将所有的就绪进程放入一个队列,然后为每个进程分配一个固定的时间片...
Book Reviews 249 references to sex, supposedly the mule that drags adolescents from the ditch of childhood dependency into the freedom of adulthood. Lastly, only scant mention of the “identity ...
这里我们关注的是“基于Linux C实现的Robin调度算法”。Robin(也称为时间片轮转)是一种用于多任务环境的调度算法,旨在确保公平性和响应时间。它在批处理和交互式系统中都表现出色,特别是对于短任务,因为它能够...
20210704-平安证券-金融&金融科技行业周报:央行强调防范外部冲击,robinhood冲刺美股.pdf
米勒-拉宾素数测试算法(MILLER-RABIN Primality Test)是一种概率性算法,用于检测一个正整数是否可能为素数。它基于2的幂次模一个数的性质,特别是费马小定理的一个扩展。该算法并非确定性的,但可以通过多次测试...
J., & ROBIN, S. S. O L E A R Y , K. D., & O‘LEAnY, S. G. O’LEAKY, K . D., PELHAM, W. E., ROSENBAUM, A., & PRICE, G. H. PKINZ, R. J . , ROBERTS, W. A,, & HANTMAN, E. TRITES, R . L. WkiAi.tx...
本文档主要针对轮转赛程安排(Round Robin Scheduling)进行了一次全面的综述,旨在系统性地梳理该领域内的相关研究与进展。轮转赛程是一种常见的赛事安排方式,在竞技体育中广泛应用。本文作者Rasmus V. Rasmussen...
安信非银2021年第23期周报:基金销售持续火热,Robinhood登陆美股.pdf
关于MKS-Robin-Nano V1.x和V2.x Robin Nano V1.x和Robin Nano V2.x之间的区别如下: ——————————————————————————————————————————————————————————...
在本文中,我们将深入探讨标题为“Weighted-Round-Robin-Arbiter-master.zip_FPGA verilog_men7y8_robi”的压缩包文件所包含的IT知识点,特别是其核心概念——带权重的优先级轮转算法(Weighted Round Robin, WRR)...
Verilog Round Robin Arbiter Model
内容描述中提到了使用NS-2网络模拟器进行性能评估,这表明了对提出的改进算法(如VDWRR,Variable Deficit Weighted Round Robin)和现有算法(如WRR和DWRR)之间的优劣进行了模拟测试。此外,内容中还提到了基于...
本文主要探讨了队列调度算法在流量管理中的应用,特别是Deficit Weighted Round-Robin (DWRR)算法及其改进方案。 DWRR算法是一种权重轮询算法,旨在实现带宽的公平分配。它通过为每个队列分配一定的“权重”,在...
时间片轮转算法(Round Robin Scheduling)是一种常用的操作系统进程调度算法。该算法的核心思想是将系统中的时间片(Time Quantum)分配给每个进程,以便公平地分配系统资源。在时间片轮转算法中,每个进程都可以...
4. Round Robin (RR)调度算法:该算法按照时间片(time quantum)来分配 CPU 时间,每个进程都将在时间片内执行一定的时间,然后将 CPU 切换给下一个进程。 5. Multilevel Feedback Queue (MFQ)调度算法:该算法将...
1. Round Robin(轮询调度):最简单的调度算法,按照用户或流的顺序依次分配资源,公平性好,但无法考虑实时性需求。 2. Proportional Fairness(比例公平):根据用户当前的速率进行动态调整,使得所有用户的平均...
### 基于螺旋线的Round-Robin Crossbar调度算法 #### 概述 本文主要探讨了基于螺旋线的Round-Robin Crossbar调度算法的相关理论与实践应用。该算法是在交叉开关(Crossbar Switch)领域的一个重要研究方向,旨在...
时间片轮转法:程序模拟进程的时间片轮转RR调度过程。Time slice Round-Robin: program to simulate the process time slice rotation RR scheduling process.