求出从i开始连续n个素数并求出相邻n-1对素数的最大差值。(不可以使用数组)
比如输入 10 8
输出 11 13 17 19 23 29 31 37 最大差值:6
我已经试着写出了从i开始连续n个素数,但是不会求相邻n-1对素数的最大差值
#include <iostream>
using namespace std;
int main() {
int i,n;
cout<<"请输入起点和从起点开始找到几个素数:";
cin>>i>>n;
for(int x=i,con=0;con<n;x++){
bool flag=1;
for(int q=2;q<=x/2;q++){
if(x%q==0){flag = false;break;}
}if(flag) {con++;cout<<x;}
}
}
求问怎么求相邻n-1对素数的最大差值哇~万分感谢!
运行结果如下:
代码:
#include <iostream>
using namespace std;
//判断素数
int prime(int n)
{
if(n<2) return 0;
for(int i = 2;i<n;i++)
{
if(n%i==0)
return 0;
}
return 1;
}
int main()
{
int i,n;
cout<<"请输入起点和从起点开始找到几个素数:";
cin>>i>>n;
int count = 0;
int maxchazhi = 0; //最大差值
int preprime; //记录上一个素数
for (;;i++)
{
if(prime(i))
{
cout << i << " ";
count++;
if(count == 1)
{
preprime = i;
continue;
}
if(count >=2)
{
if(i - preprime > maxchazhi)
{
maxchazhi = i - preprime;
}
preprime = i;
}
if(count == n)
break;
}
}
cout << "最大差值:"<< maxchazhi;
return 0;
}
你的代码修改如下
#include <iostream>
using namespace std;
int main()
{
int i, n, up, max=0;
cout << "请输入起点和从起点开始找到几个素数:";
cin >> i >> n;
for (int x = i, con = 0; con < n; x++)
{
bool flag = 1;
for (int q = 2; q <= x / 2; q++){
if (x % q == 0) {flag = false; break; }
}
if (flag) {
con++;
cout << x << " ";
if (con>1 && x-up>max)
max = x-up;
up = x;
}
}
cout << endl;
cout << "最大差值:" << max << endl;
}
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
定义一个临时变量用来保存当前最大差值。
遍历n个素数,素数之间的差值与临时变量进行比较,如果大于临时变量,则更新临时变量的值。