【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;
}
全部评论

相关推荐

09-29 11:19
门头沟学院 Java
点赞 评论 收藏
分享
HNU_fsq:建议直接出国,这简历太6了。自愧不如
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务