#include<iostream>
using namespace std;
bool IsPrimeNum(int n); //判断自然数n 是否是质数
const int max = 5 ; //表示数组的元素个数的最大值
int main()
{
int a[max]; // 定义一个有max个元素的数组
int i;
cout<<"请输入"<<max<<"个自然数:"<<endl;
for(i=0;i<max;i++)
{
cin>>a[i]; //输入max个数据
}
cout<<"输入的数据中为质数的有:"<<endl;
for(i=0;i<max;i++)
{
if(IsPrimeNum(a[i])) //如果是质数
{
cout<<a[i]<<endl;
}
}
return 0;
}
bool IsPrimeNum(int n) //判断自然数n 是否是质数
{
int i;
bool flag = true; //质数标志,ture为质数
if(n < 2) //0 和 1 既不是质数也不是合数
{
flag = false;
}
else
{
for(i = 2; i < n; i++) // 此处求质数方法可以改进
{
if(n%i == 0)
{
flag = false; //检测到不是质数则退出for循环
break;
}
}
}
return flag; //返回是否是质数的标志
}
测试结果为:
请输入5个自然数:
2 3 4 5 7
输入的数据中为质数的有:
2
3
5
7
Press any key to continue
可用筛法求出
筛法是一种高效求质数的方法,是由希腊数学家埃拉托色尼首先提出的
1将所有候选数(此题中为2到1000)放入筛中
2找出筛中的最小数min,min必定为质数
3把min放入质数集合中,然后将他的所有倍数从筛中筛去
4重复2-3,直到筛空
#include<stdioh>
int main()
{
int a[22],i,j;
for(i=0;i<20;i++)
scanf("%d",&a[i]);
i=0;
while(i<20)
{
for(j=2;j<=a[i]/2;j++)
if(a[i]%j==0)
break;
if(j>a[i]/2&&a[i]!=1)
printf("%-3d",a[i]);
i++;
}
printf("\n");
return 0;
}
如果这个程序只处理一对数据的话,用一个循环,一个数一个数地判断。如果说要一次判断多组数据,并且知道这些数据地范围的话,可以先把这个范围里面的所有素数保存起来,然后对每一组数据,都在这个数组中查找满足条件的所有数。这样的话就只用找一次素数,后面的都是查找的问题,应该效率高一点吧
#include<stdioh>
#include<stdlibh>
int p[1230];
bool IsP(int n)
{
int i = 2;
while(i < n / 2)
{
if(n % i == 0)
return false;
i++;
}
return true;
}
int main()
{
int i = 2;
int count = 0;
for(;i < 10000;i++)
{
if(IsP(i))
p[count++] = i;;
}
int n,m;
printf("请输入两个整数,(第一个数比第二个数小)以-1结束:\n");
scanf("%d",&n);
while(n != -1)
{
scanf("%d",&m);
i = n;
count = 0;
while(p[count++] < n);
while(p[count] <= m)
{
printf("%d\n",p[count]);
count ++;
}
scanf("%d",&n);
}
system("pause");
return 0;
}
这是我的代码,可以运行,我只考虑了2到10000之间的素数
以上就是关于c++函数求质数。要求 输入5个数,选择出那几个是质数的程序。本人新手,希望大虾帮忙。在线等。。。。3Q全部的内容,包括:c++函数求质数。要求 输入5个数,选择出那几个是质数的程序。本人新手,希望大虾帮忙。在线等。。。。3Q、编写程序求出1000以内的所有质数、输入20个数到一个数组中,找出其中的质数.写出程序过程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)