求n以内素数。
素数又称质数,它是这样的整数,它除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积。
有两种方法:筛选法和开根号法
筛选法:从小到大筛去一个已知素数的所有倍数。依次删除可被2整除,3整除。。。。的数字,剩下的则为素数 。
开根号法:如果一个数(>2),对这个数求平方根,如果这个数能被这个数的平方根到2之间的任何一个(只要有一人就行)整除说明就不是质数,如果不能就说明是质数!
原理:假如一个数N是合数,它有一个约数a,a×b=N,则a、b两个数中必有一个大于或等于根号N,一个小于或等于根号N。因此,只要小于或等于根号N的数(1除外)不能整除N,则N一定是素数。
#include <iostream>
#include <cmath>
using namespace std;
void getPrime0(int);
void getPrime(int);
void getPrime2(int);
void getPrime3(int);
int main(){
cout << "Hello world!" << endl;
int n = 100;
getPrime0(n);
getPrime(n);
getPrime2(n);
getPrime3(n);
system("pause");
return 0;
}
//求n以内的素数
//素数又称质数,它是这样的整数,它除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积。
//算法:筛选法,从小到大筛去一个已知素数的所有倍数。依次删除可被2整除,3整除。。。。的数字,剩下的则为素数
void getPrime0(int n){
int i,j;
bool m;
for(i = 1; i <= n; i ++){
m = true;
for(j = 2; j < i; j ++){
if(i % j == 0){
m = false;
break;
}
}
if(m){
cout << i << " ";
}
}
cout << endl;
}
//同上
void getPrime(int n){
int a[n + 1];
for(int i = 1; i < n + 1; i ++){
a[i] = 1;//用1对数组进行标记
}
for(int i = 2; i < n + 1; i ++){
for(int j = 2; j < n + 1; j ++){
if(a[j] == 1 && j % i == 0 && j / i != 1){//若还未标记,且是如2的倍数,并不是如2本身
a[j] = 0;//非素数用0标记,最后仍未1的则为素数
}
}
}
for(int i = 1; i < n + 1; i ++){
if(a[i] == 1){
cout << i << " ";
}
}
cout << endl;
}
//等同于getPrime(int n)
void getPrime2(int n){
int a[n + 1],i,j;
for(i = 1; i < n + 1; i ++){
a[i] = 1;
}
for(i = 2; i < n + 1; i ++){
if(a[i] == 1){
for(j = i + i; j < n + 1; j = j + i){
if(j % i == 0){
a[j] = 0;
}
}
}
}
for(i = 1; i < n + 1; i ++){
if(a[i] == 1){
cout << i << " ";
}
}
cout << endl;
}
//开根号法
//算法:如果一个数(>2),对这个数求平方根,如果这个数能被这个数的
//平方根到2之间的任何一个(只要有一人就行)整除说明就不是质数,
//如果不能就说明是质数!
//原理:假如一个数N是合数,它有一个约数a,a×b=N
//则a、b两个数中必有一个大于或等于根号N,一个小于或等于根号N。
//因此,只要小于或等于根号N的数(1除外)不能整除N,则N一定是素数。
void getPrime3(int n){
int a[n + 1],i,j,k;
for(i = 1; i < n; i ++){
k = (int)sqrt(i);
for(j = 2; j <= k; j ++){
if(i % j == 0){
break;
}
}
if(j > k){
cout << i << " ";
}
}
}
分享到:
相关推荐
输出n以内的所有素数输出n以内的所有素数输出n以内的所有素数输出n以内的所有素数输出n以内的所有素数输出n以内的所有素数输出n以内的所有素数输出n以内的所有素数输出n以内的所有素数输出n以内的所有素数输出n以内...
任意输入一数n,求1到n-1的素数。埃式筛选法,效率高!
C语言程序设计-求给定正整数n以内的素数之积;(n).c
键盘输入n,判断n以内的素数,存入数组内输出。
输出n以内的所有素数 c语言:找出N以内的所有素数
编写C++程序完成以下功能: (1) 提示用户输入N; (2) 计算出从2到N之间的所有素数; (3) 将结果保存在一个文本文件中。
主要介绍了java使用筛选法求n以内的素数示例(java求素数),需要的朋友可以参考下
java代码-使用java解决输出1000以内最大的n个质数及其和。输出形式“质数1+质数2+...+质数n=的源代码 ——学习参考资料:仅用于个人学习使用!
python输出n以内的所有素数
初等数论中输出n以内的质数初等数论中输出n以内的质数初等数论中输出n以内的质数初等数论中输出n以内的质数
利用简单的算法找出n以内的所有素数,并利用简单的文件操作打开文件写入数据,关闭文件
使用Visual C++6.0 编写求整数n以内的素数,可以判断一个素数是否为素数
输出n以内的所有素数
n以内素数个数
很经典的问题,判断一个数是否是素数,并求他们的和。
输出n以内的所有素数
从键盘标准输入n,然后可以输出到文件前n个素数。
求n以内的质数分析质数: 又称素数, 在大于1的自然数中, 除了1和它本身以外不再有其它因数, 如 2,3,5,7,11 等思路:1. 2以外的偶数都不是质数2
搜寻N以内的素数可转化为搜寻sqrt(N)以内的素数,再转化为搜寻sqrt(sqrt(N))以内的素数,……,从而达到快速搜寻的目的;依次划去2~N内各素数的倍数,最后留下的都是素数。 本程序避开了逆向的递归过程,巧妙转化成...
输出n以内质数到文本.py