题目标题: 在给定的区间范围内找出所有素数能构成的最大的等差数列(即等差数列包含的素数个数最多)。 详细描述: 接口说明 原型: int GetMaxArray(unsignedint m, unsignedint n, unsignedint *pArrayNum , unsignedint *pArray) 输入参数: unsigned int m 给定的区间下限 unsigned int n 给定的区间上限 输出参数: unsigned int *pArrayNum 等差数列中数字的个数 unsigned int *pArray 等差数列 返回值: int 0:处理成功 -1:出现异常 限制: 0 <= m m<N N<=30 举例: 在区间[0, 10]中,素数构成的最大等差数列为3,5,7 问题分析: 分两部分1、找范围内的所有质数:除了1和它本身以外不再被其他的除数整除 2、找等差数列,内循环a[1]-a[0]开始到a[n]-a[0]外循环a[0]到a[n],z这样公差从最小到最大,每次记录对应的首项和公差 #include <iostream>
using namespace std;
#define max 100
int main(void)
{
int m,n,k,p,j,count,diff,maxcount,a1,maxdiff;
k=0;
p=2;
count=0;
maxcount=0;
int a[100];
cin>>m>>n;
if(m<3)
m=2;
for(int i=m;i<n+1;i++)
{
for(j=2;2*j<i;j++)
{
if(i%j==0)
break;
}
if(2*j>i)
{
a[k]=i;
k++;
}
}
for(int i=0;i<k;i++)
{
for(int q=i+1;q<k;q++)
{
diff=a[q]-a[i];
count=2;
for(int x=q+1;x<k;x++)
{
if(a[x]-a[q]==diff)
{
q=x;
count++;
}
}
if(count>maxcount)
{
a1=a[i];
maxdiff=diff;
maxcount=count;
}
}
}
for(int i=0;i<maxcount-1;i++)
{
cout<<a1+maxdiff*i<<" ";
}
cout<<a1+maxdiff*(maxcount-1);
return 0;
}
|