【c++】寻找等差数列
在给定的区间范围内找出所有素数能构成的最大的等差数列(即等差数列包含的素数个数最多)。
输入样例:
1 10
输出样例:
3 5 7
程序代码:
#include<iostream>
#include<cstdio>
#include<cmath>
#define max 100
using namespace std;
int sushu(int x);
int f1(int* a,int x,int y);
int main()
{
int a,b,k;
int num[max];
cin>>a>>b;
k=f1(num,a,b);//num数组存储a---b内的所有素数
int dif;//存储公差
int cnt;
int maxcnt=0;
int begin=0,maxdif=0;
for(int i=0;i<k-1;i++)
for(int j=i+1;j<k;j++)
{
dif=num[j]-num[i];
cnt = 2;
int temp =num[j];
for(int m=j+1;m<k;m++)
{
if((num[m]-temp)==dif)
{
cnt++;
temp=num[m];
}
}
if(cnt>maxcnt)
{
maxcnt = cnt;
begin=num[i];
maxdif=num[j]-num[i];
}
}
for(int i=0;i<maxcnt-1;i++)
cout<<begin+i*maxdif<<' ';
cout<<begin+(maxcnt-1)*maxdif;
return 0;
}
int sushu(int x)
{
if(x<2)
return 0;
for(int i=2;i<=sqrt(x);i++)
{
if(x%i==0)
return 0;
}
return 1;
}
int f1(int* a,int x,int y)
{
int k=0;
for(int i= x;i<=y;i++)
{
if(sushu(i))
{
a[k]=i;
k++;
}
}
return k;
}