用c++编程 求3—100之间的素数

如题所述

求素数的问题,尤其是求某个数下所有的素数的问题,具有一定的普遍性。对于这种“求 xx 下所有素数的问题”需要注意几点,就可以得到最优的快速算法。

(1)求某个数n的素数,只需要判断n 是否可以被2~sqrt(n)之间的数整除(包括2;如果sqrt(n)是整数,也包括它)。如果没有被整除的,则是素数。

为什么是到sqrt(n),而不是取n下所有的数?这是因为,对于一个数n来说,如果它有一个非1 和非它本身的因子,那么n必然有两个因子,其中的一个较小的因子,假定这个因子为m,它的取值范围必定在1<m<=sqrt(n)。当且仅当这两个因子相等的时候,取上面的等号。
如果你在(1,sqrt(n)]找不到n的整数因子,你一定也不会在[sqrt(n),n)中找到n的整数因子。

(2)在(1,sqrt(n)]中,没有必要用每一个整数去试试是否能整除n。而是只用这个范围之间的素数就可以了。因为任何一个和数都可以分解为几个素数的积。因此,在计算这种“求小于n的所有的素数”问题时,就有必要存储下来已经计算出来的素数,可以减少以后进行%运算的次数。当n很大的时候,这种方法就显示出优势了,只是要多去开销一些内存空间。

一句话,用(1,sqrt(n)]之间的素数去判断一个数n是否为素数。

代码如下:

#include "stdafx.h"
#include <iostream>
#include <math.h>
using namespace std;

int main()
{
int num = 100; //求num以下所有的素数
int i,j,i_prime = 0;
int primevector[50] = {0}; //用于存储已经计算出来的素数,要用足够大的空间来存储所有的素数,对于100来说,50已经足够了

//首先在primevector中记录下前两个素数2 , 3, i_prime是此数组中质数的个数
primevector[i_prime++] = 2;
primevector[i_prime++] = 3;

for(i=4;i<num;i++) //分别计算i 是不是素数
{
bool isprime = true;
float ftemp = sqrt(i);
//判断 i 是否为素数
for(j=0;primevector[j] <= ftemp;j++)
{
if(i % primevector[j] == 0)
{
isprime = false;
break;
}
}
//如果 i 是素数,则保存到primevector之中
if(isprime)
primevector[i_prime++] = i;

}

//输出所有的素数
for(i = 0;i<i_prime;i++)
cout<<primevector[i]<<' ';
cout<<endl;

return 0;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-07-31
运行结果如下:
C:\Users\pc>notepad sushu.cpp

C:\Users\pc>g++ -o sushu.exe sushu.cpp

C:\Users\pc>sushu.exe
3—100之间的素数,素数如下
3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
#include <iostream>
using namespace std;
int main()
{
 int arr[101];
 int i, j;
 for(i = 1; i < 101; i++)
  arr[i] = 1;
 for (i = 2; i < 101; i++)
 {
  if(arr[i]!=0)
   for (j = i+1; j< 101;)
   {
    if(j%i==0)
     arr[j] = 0;
    j = j+1;
   }
 }
cout<<"3—100之间的素数,素数如下\n";
 for(i = 3; i < 101; i++)
  if (arr[i]!=0)
   cout << i << " ";
 return 0;
}

第2个回答  推荐于2016-10-23
#include<math.h>
#include <stdio.h>

main()
{
int i,j,n,a[101];
for( i=1; i<=100; i++)
a[i]=i;
for(i=2;i<sqrt(100); i++)
for(j=i+1; j<=100; j++)
{
if(a[i]!=0&&a[j]!=0)
if(a[j]%a[i]==0)a[j]=0;
}
printf("\n")
for(i=2,n=0; i<=100;i++)
{
if(a[i]!=0)
{printf("%d",a[i]);
n++;}
if(n==10)
printf("\n");
}
}本回答被提问者采纳
第3个回答  2006-03-15
/****************************************/
#include<iostream>
/****************************************/
using namespace std;
/****************************************/
int main()
{
int i,k,n;
for(i=3;i<=100;i++)
{
for(k=2;k<=i;k++)
{
if(i%k==0)
{
break;
}
}
if(i==k)
cout<<i<<" is a prime.\n";
else
cout<<i<<" isn't a prime.\n";
}
return 0;
}
/****************************************/

请用C++编写一个程序:找到3~100中所有的质数。
include <iostream> using namespace std;int main(){ int m,i,k,n=0;\/*n作计数器*\/ for(m=1;m<=100;m=m+2){ k=1;\/\/标志变量,预设为1,一旦变成0表示不是素数 for(i=2;i<=m\/2;i++)if(m%i==0){ k=0;break;} if(k==1)cout << m << (++n%10==0?'\\n':'\\...

编写一个程序,输出3~100之间的全部素数。
if n % i == 0: return False 否则,n是素数 return True# 创建一个空列表,用来存储找到的素数primes = []# 遍历3到100之间的所有整数for num in range(3, 101): # 如果是素数,就添加到列表中 if is_prime(num):primes.append(num)# 输出列表中的所有元素,以逗号分隔print(*pr...

编程:求3到100之间的素数之和
cout<<"3到100素数之和为"<<add<<endl;} 素数就是无法被其他数整除的数,比如3,5,7,11,13等,所以第一个FOR循环是设置从3到100一次查找,第二个for循环,是用它除以它小的每一个整数,如果有可以除尽的,则它不是素数,执行break跳出本次循环,如果都除不尽,那么判断其为素数,add是和,add=add+n,n是你找...

c++新手问题编程输出100以内的素数,请注释...
int main(){ int j;for(int i=2;i<100;i++) \/\/第一循环是从2-100个数 { for(j=2;j<=i\/2;j++) \/\/第二个循环是判断i的值是不是素数.{ if(i%j==0) \/\/如果被整除 那么就不是素数.跳出 break;} if(j>i\/2) \/\/判断上面循环是否正常结束 cout<<i<<" "; \/\/如果上...

用c++求100以内的素数
for(i=2;i<=100;i++) \/\/因为题目是求100以内的质数,所以检查2至100之间的数据,循环从2到100 { \/\/以下,是针对每个i进行检查,如果是质数,则输出,否则继续循环,检查下一个数 m=int(sqrt(i)); \/\/对i进行开方,取得i的算术平方根 m for(j=2;j<=m;j++) \/\/检查2到m中是否...

c++ 求0到100之间的所有素数,并输出个数
include <iostream>#include <vector>using namespace std;int main(){vector<int> nPrime; \/\/存放素数nPrime.push_back(2); \/\/2是第一个素数bool is_prime = false; \/\/记录该树是否是素数for (int i = 3; i < 100; i += 2) { \/\/检测3到100之间的所有奇数is_prime = true;for ...

用C语言编写一个程序输出3到100间的素数
#define N 100void main(){ int k; printf("3到100间的素数为:\\n"); for (int j=3;j<N;j++) { k=0; for(int i=2;i<j;i++) if(j%i==0) k=1; if(k==0) printf("%d ",j); } printf("\\n");} xdhydn | 发布于2010-12-06 举报| 评论 0 2 #include <stdio.h>int...

C++ 用筛法求100以内的素数
\/* 编程时间:2009年7月27日 \/* 主要功能:求素数 \/ include<iostream> using namespace std;\/\/编译命令 include<math.h> const int MAX=100;\/\/定义常量MAX int main()\/\/主函数 { int prime[MAX+100]={0};\/\/定义变量并初始化 int i,j,k=sqrt(MAX);for(i=2; i<=k; i++)\/\/...

C++ 求整数3~100中的素数的【个数】
一种方法:先做一点简单的处理,3-100之间的偶数肯定都不是素数,因此不用理会,然后对其余的数字判断是否是素数,如果是则计数加1 第二种方法:模仿筛法求素数,用一个数组存放数据,然后从第一个数开始判断是否是素数,是则计数加1,判断完之后将该数的倍数的数全部标记为不是素数 ...

在线等答案,用C++ 输出100以内的所有素数,怎么做?
include <stdio.h> include<math.h> int isPrime(int x);int main(){ int i;for(i=2;i<100;i++)if(isPrime(i))printf("%d ",i);} int isPrime(int x) \/\/这个是判断是否素数的函数,是返回1,不是返回0 { int i,flag=1;for(i=2;i<=sqrt(x);i++)if(x%i==0){ flag=0...

相似回答