输入正整数n(n>=2),求不大于n的全部质数(素数)
2017-04-14 11:52
218 查看
质数(prime number)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为质数。
比如:2、3、5、7、11、13、17、19······
2、3、5、7、11、13、17、19
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
cout<<2<<endl;
for(int i=3;i<=n;i+=2){//除了2之外,只需要遍历所有的奇数i是否满足条件即可
int k;//这里的k做测试使用
for(k=3;k<i;k+=2){
if(i%k==0)
break;
if(k*k>i) //当 k 大于 i的平方根后就不要再试了
break;
}
if(k*k>i)
cout<<i<<endl;
}
return 0;
}
******************************************************
方法二:
//筛选法求素数
/* 利用空间(内存)去换时间
1.把所有的数初始化(假设)为素数
2.通过for遍历把每一个素数的倍数都标记为非素数
3.剩下的数就都是素数了
*/
#include <iostream>
using namespace std;
#define max_num 100
char isPrimer[max_num+10];
int main(){
for (int i=2;i<=max_num;++i)//把所有的数初始化(假设)为素数
isPrimer[i] = 1;
for (int i=2;i<=max_num;++i){//通过for遍历把每一个素数的倍数都标记为非素数
if(isPrimer[i]){
for(int j = 2*i;j<=max_num;j+=i)//依次为2,3,4,。。。的倍数,标记为非素数
isPrimer[j] = 0;//把素数i的倍数标记为非素数
}
}
for(int i=2;i<=max_num;++i){
if(isPrimer[i]){
cout <<i<<endl;
}
}
return 0;
}
比如:2、3、5、7、11、13、17、19······
2、3、5、7、11、13、17、19
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
cout<<2<<endl;
for(int i=3;i<=n;i+=2){//除了2之外,只需要遍历所有的奇数i是否满足条件即可
int k;//这里的k做测试使用
for(k=3;k<i;k+=2){
if(i%k==0)
break;
if(k*k>i) //当 k 大于 i的平方根后就不要再试了
break;
}
if(k*k>i)
cout<<i<<endl;
}
return 0;
}
******************************************************
方法二:
//筛选法求素数
/* 利用空间(内存)去换时间
1.把所有的数初始化(假设)为素数
2.通过for遍历把每一个素数的倍数都标记为非素数
3.剩下的数就都是素数了
*/
#include <iostream>
using namespace std;
#define max_num 100
char isPrimer[max_num+10];
int main(){
for (int i=2;i<=max_num;++i)//把所有的数初始化(假设)为素数
isPrimer[i] = 1;
for (int i=2;i<=max_num;++i){//通过for遍历把每一个素数的倍数都标记为非素数
if(isPrimer[i]){
for(int j = 2*i;j<=max_num;j+=i)//依次为2,3,4,。。。的倍数,标记为非素数
isPrimer[j] = 0;//把素数i的倍数标记为非素数
}
}
for(int i=2;i<=max_num;++i){
if(isPrimer[i]){
cout <<i<<endl;
}
}
return 0;
}
相关文章推荐
- 例 5.9 输入一个大于3的整数n,判定它是否为素数(prime,又称质数)。
- <C语言>如何一步一步根据简单的代码联想到更多的功能?(实现输入一个整数,输出比它小包括它本身的所有素数。)
- 算法:从键盘循环输入一个整数,判断是否是素数\质数
- 判断输入的整数是不是质数(素数)
- 输入任意一个大于2的正整数n,输出所有小于等于n的素数
- 输入整数m,k将会出现大于m的k个与m最近的连续素数
- 用Java声明一个方法(函数)找出输入数值的范围去全部素数(质数)
- 华为机试题:输入一组大于等于0的整数,从小到大排序输出,输出有连续数时,只输出连续数的最小和最大值
- 写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息。
- 【c语言】 给出一个大于或等于3的正整数,判断它是不是一个素数
- 输入两个正整数m和n(m<n),求m到n之间(包括m和n)所有素数的和,要求定义并调用函数isprime(x)来判断x是否为素数(素数是除1以外只能被自身整除的自然数)。
- <仅是自己做笔记。。。系列-14>输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。
- 一个正整数有可能可以被表示为 m(m>=2) 个连续正整数之和,编写一个程序,输入一个正整数,然后找出符合这种要求的所有 连续正整数序列,若不存在这种序列,则打印None。
- 输入大于5位的正整数,实现输出它的位数,并且正向和逆向输出这个整数
- 编写猜字游戏,随机产生一个1-1000的整数,玩家任意输入一个数字,计算器回答大于该数或者小于该数,直至猜中。(显示玩家猜的次数)
- 写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息。
- C primer plus 第七章 练习9: 编写一个程序,接受一个整数输入,然后显示所有小于或等于该数的素数。
- 输入一组整数,统计其中质数的个数。
- 从键盘输入一个大于9999的整数,然后把每个数位上的数累加
- 输入一个整数,如果该整数大于1000,则输出“big”,如果该整数介于100到1000之间(包含两个边界),则输出“middle”,如果上面两种情况都不满足,输出”small“