7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列,其公差为 30,长 度为 6。那么,长度为 10 的等差素数列,其公差最小值是多少,并给出该等差素数数列。
因为不会matble所以用的c++,后期补代码
这个题应该就是暴力求解,作业题也没有给出具体的时间和数据大小,所以也没有办法判断时间复杂度,那么埃筛或者线筛或者朴筛也就都可以了。不需要控制时间。
#include<bits/stdc++.h>
using namespace std;
//欧拉筛法(最快筛法)待优化
const int N = 1e5+5;//欧式筛
bool prime[N];//prime[i]表示i是不是质数
int p[N], tot=0;//p[N]用来存质数
void init(){
for(int i = 2; i < N; i ++) prime[i] = true;//初始化为质数
for(int i = 2; i < N; i++){
if(prime[i]) p[tot ++] = i;//把质数存起来
for(int j = 0; j < tot && i * p[j] < N; j++){
prime[i * p[j]] = false;
if(i % p[j] == 0) break;//保证每个合数被它最小的质因数筛去
}
}
}
int main()
{
ios_base::sync_with_stdio(0);
init();
for(int i=0;i<300;i++)
for(int j=0;j<tot;j++)
{
int flag=0;
for(int z=0;z<10;z++)
if(!prime[p[j]+i*z])
{
flag=1;break;}
if(!flag&&i)
{
cout<<i<<endl;
for(int k=0;k<10;k++)
{
cout<<j+k*i<<" ";
}
goto tag;
}
}
tag:
cout<<endl;
}