求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以内最大的k个素数以及它们的和(C)
任意输入一数n,求1到n-1的素数。埃式筛选法,效率高!
输出n以内的所有素数c语言:找出N以内的所有素数 输出n以内的所有素数是c语言中的一种常见算法题,旨在找到小于或等于n的所有素数。该算法有多种实现方法,本文将介绍两种常见的方法。 方法一: 筛选法 该方法的...
C语言程序设计-求给定正整数n以内的素数之积;(n).c
输出n以内的所有素数输出n以内的所有素数输出n以内的所有素数输出n以内的所有素数输出n以内的所有素数输出n以内的所有素数输出n以内的所有素数输出n以内的所有素数输出n以内的所有素数输出n以内的所有素数输出n以内...
键盘输入n,判断n以内的素数,存入数组内输出。
编写C++程序完成以下功能: (1) 提示用户输入N; (2) 计算出从2到N之间的所有素数; (3) 将结果保存在一个文本文件中。
java代码-使用java解决输出1000以内最大的n个质数及其和。输出形式“质数1+质数2+...+质数n=的源代码 ——学习参考资料:仅用于个人学习使用!
标题 "50000000(五千万)以内质数(素数)3001134(约三百万)个.zip" 暗示了这个压缩包包含了一个文本文件,列出了从1到50,000,000之间所有约300万个质数。描述中的 "普通pc演算(i7处理器)" 表明这些质数是通过一台搭载...
page: .asciiz "-----用筛选法求 100 以内素数-----\n\n" .text .globl __start__ start: la $t0, array # ... ``` 代码解释 1. 首先,我们定义了一个数组array,大小为400个字节,用来存储从2到100的所有数字的...
以下是一个使用筛选法在Java中求解n以内素数的示例代码: ```java public class AratosternyAlgorithm { public static void getPrimes(int n) { if (n || n > 1000000) { throw new IllegalArgumentException(...
python输出n以内的所有素数
计算n以内的所有素数是一项基础的算法练习,它涉及到数学和计算机科学的结合。在这个任务中,我们需要实现一个程序,该程序能够识别小于或等于n的所有素数,并将它们写入一个文件中。下面我们将详细讨论如何实现这个...
具体来说,小于n的质数数量大约为\( \frac{n}{\ln n} \),这里的\(\ln\)表示自然对数。 2. **梅森素数**:一种特殊类型的质数,形式为\( 2^p - 1 \),其中p本身也是一个质数。这种质数在密码学中有重要应用。 3. **...
要实现求解1000以内素数的程序,我们可以采用逐个相除法,也称为试除法。这种方法的基本思想是,对于每一个待判断的数字n,我们从2开始依次尝试将其除以小于等于它的所有正整数,如果没有找到能整除n的数,那么n就是...
附件是求n以内最大的k个素数c语言程序代码,文件绿色安全,请大家放心下载,仅供交流学习使用,无任何商业目的! 这个程序首先使用埃拉托斯特尼筛法找出所有小于等于n的素数,然后从n开始递减,检查每个数字是否为...
附件是C 语言求n以内最大的k个素数,文件绿色安全,请大家放心下载,仅供交流学习使用,无任何商业目的! 这个程序首先使用埃拉托斯特尼筛法找出所有小于等于n的素数,然后从n开始递减,检查每个数字是否为素数,...
求n以内最大的k个素数c 本题要求计算并输出不超过n的最大的k个素数以及它们的和。 输入格式: 输入在一行中给出n(10≤n≤10000)和k(1≤k≤10)的值。 输出格式: 在一行中按下列格式输出: 素数1+素数2+…+素数k=总和...
本篇文章将深入解析如何利用C++语言求解1000以内的所有素数及其数量,同时探讨该程序背后的算法原理。 ### 一、素数检测算法:埃拉托斯特尼筛法 在算法设计中,一种高效检测素数的方法是埃拉托斯特尼筛法(Sieve ...