第1个回答 2012-10-26
算法:
先求出100-1000之内所有素数的个数,记录下最大max和最小的值min,其中间的差值
是最大等差用于for循环for(int i=0;i<=max-min;i++),然后创建一个结构体,其中记录起始值和末尾值还有差值从1开始(开始时记录起始值和差值),一旦有不符合条件的(填充末尾值和数组长度),则该结构体填充完毕(和上一个比较其数组长度)选取最大的作为当前记录,然后则从新开始,差值加1,依次循环
(BUG 默认起始值是从最小的素数开始的)
改进:创建max-min个上述结构体,分别记录下不同差值的数组最大长度,然后比较不同差值下的最大数组长度
编程这东西学到最后拼的是思维,而不是编码,但如果编码都不过关,就有些不好了本回答被网友采纳
第2个回答 2012-11-02
#include<stdio.h>
#include<math.h>
void main()
{
int i,j,d,k=0,m=1,num,sh[450]={0},dc[450]={0},dcmax,MAX,Maxnum=2,MD;
for(i=101;i<1000;i=i+2)
{
for(j=2;j<=sqrt(i);j++)
if(i%j==0)break;
if(j>sqrt(i)){sh[k++]=i;}
}
printf("区间[100,1000]内的素数:\n");
for(k=0;sh[k];k++)
printf("%5d",sh[k]);
for(i=0;i<k-1;i++)
for(j=i+1;j<k;j++)
{
dcmax=sh[j];
d=sh[j]-sh[i];
num=2;
for(m=j+1;m<k;m++)
{
if(sh[m]-sh[i]==num*d){num++;dcmax=sh[m];}
else if(sh[m]-sh[i]>num*d)
{
if(num>Maxnum)
{
Maxnum=num;
MAX=dcmax;
MD=d;
}
break;
}
}
}
printf("\n[100,1000]内的素数构成的最大等差数列:");
for(i=Maxnum-1;i>=0;i--)
printf("%5d",MAX-MD*i);
printf("\n");
}