素数求解

#include<iostream>
#include<math.h>
using namespace std;
void main()
{
int i,a,k=1;
cout<<"请输入一个整数:"<<endl;
cin>>a;
if(a==0 || a==1)
cout<<"不是素数! "<<endl;
else if(a==2||a==3)
cout<<" 是素数"<<endl;
else
{
for(i=2;i<=int(sqrt(a));i++)
{
if(a%i==0)
{
cout<<"不是素数!"<<endl;
k=0;
}
           break;
}
if(k==1)
{
cout<<"是素数!"<<endl;
}
}
}
时间: 2024-11-10 07:10:53

素数求解的相关文章

(素数求解)I - Dirichlet&#39;s Theorem on Arithmetic Progressions(1.5.5)

Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Description If a and d are relatively prime positive integers, the arithmetic sequence beginning with a and increasing by d, i.e., a, a + d, a + 2d, a + 3d, a 

素数求解方法及其优化

题目: 请实现一个函数,对于给定的整型参数N,依次打印出小于N的素数. 解法一:试除法 由素数的定义我们很自然的会想到如下代码: #include <stdio.h> void print_prime(int n) { int i=0; for(i=2;i<=n;i++) { int j=0; for(j=2;j<i;j++) { if(0==i%j) break; } if(j==i) printf("%d\t",i); } } int main() { in

ACM/ICPC 算法训练 之 &quot;打表&quot;思路(防超时) ——附加素数筛选法

何为"打表"呢,说得简单点就是: 有时候与其重复运行同样的算法得出答案,还不如直接用算法把这组数据所有可能的答案都枚举出来存到一个足够大的容器中去-例如数组(打表),然后再输入数据的时候,直接遍历容器,检索这个数据是否有题意要求的结果. 举一个几乎所有程序员都知道的简单例子= =: 求素数(POJ 1595)-Prime cuts 这一题大意是给出 多组N(1~1000)和C,让你从N内素数的中间项向外扩展C个素数,比如给出7 1,素数有5个(注意此题出题人坑爹得让1作为"素

素数的筛法

一 写在开头 1.1 本文内容 本文实现了素数的筛法算法. 二 算法原理与实现 在写代码的过程中,时不时会遇到求解素数的任务,特意将素数求解方法总结成文章以备不时之需.素数的求解算法大概有两种.一种是枚举某一范围的数,然后逐个判断该数是否为素数.这种方法简单但效率不高.另一种方法是使用素数的筛法将某一范围内的所有素数筛选出来,然后再打表.筛法的原理很简单:从最小的素数2开始,依次将2的倍数给剔除,然后将后面没有被剔除的最小素数3的倍数依次剔除......重复上述操作就可以将范围内的所有合数给剔除

『素数(Prime)判定和线性欧拉筛法(The sieve of Euler)』

素数(Prime)及判定 定义 素数又称质数,一个大于1的自然数,除了1和它自身外,不能整除其他自然数的数叫做质数,否则称为合数. 1既不是素数也不是合数. 判定 如何判定一个数是否是素数呢?显然,我们可以枚举这个数的因数,如果存在除了它本身和1以外的因数,那么这个数就是素数. 在枚举时,有一个很简单的优化:一个合数\(n\)必有一个小于等于\(\sqrt{n}\)的因数. 证明如下: 假设一个合数\(n\)没有小于等于\(\sqrt{n}\)的因数. 由于\(n\)为合数,所以除了\(n\)与

素数判定Miller_Rabin 算法详解

最简单直观简单的素数判定方法就是试除法.对于判断数n是否是素数,我们从2开始一直到sqrt(n).如果找到一个因子则判断n不是素数,否则是素数.代码如下: bool isPrime( long long n ) { for(long long i = 2; i*i <= n; i++) { if(n%i == 0) return false; } return true; } 如果要找到成1~n的所有素数那么这个时间代价就变为O(n^2),很多时候是不可接受的.所以随着学习的深入,我们了解到了素

算法设计与分析——习题一

习题1 1.1. 用于计算gcd(m,n)的欧几里得算法 1.1.1. 算法描述  辗转相除法,又名欧几里得算法(Euclidean algorithm),是求最大公约数(greater common divisor)的一种,通常做法是:用较小的数去除较大的数,用第二余数再去除第一余数,最终我们可以得到最终的余数为0以及最大公约数. 1.1.2.伪代码 Euclid(m,n) //使用Euclid计算gcd(m,n) //输入:两个不全为0的非负整数m,n //输出:m,n的最大公约数 whil

大规模素数的求解为题

问题原型:求三千万以内的素数. 问题的解决办法很简单,写一个求素数算法 然后循环就可以.这个是顺序执行方式,下面附上代码 public abstract class PrimeAbstract { public boolean isPrime(int i){ if(i<=1)return false; else{ for(int j=2; j<=Math.sqrt(i);j++){ if(i%j == 0)return false; } return true; } } public stat

求解第N个素数

这个题目是现代软件工程老师布置的一个个人项目,当看到这个题目第一个想到的就是筛法.然而仔细考虑下,筛法的信息冗余量实在太大,我要求第N个素数,却把前N个素数都求了出来,那有没有一个直接能求解第N个素数是什么的方法呢?答案当然是...没有.但是,有一种方法用迭代的方法能够求解π(x),即是0~x中素数的个数,它就是梅塞尔—勒梅尔公式,黑科技一般的公式.具体这个公式是什么样的,贴出来太麻烦,可以去wiki看一下,搜索素数计数函数即可(中文版需FQ). 把这个问题搞定后,怎么求得第N个素数呢?显然当N