题目不多说,直接上思路:
首先问题的关键是求最小的公差,那好,我们可以从公差为1开始暴力枚举,为啥?因为题目要求输出的是一个整数,直接输出就完事了,你懂得。
然后想公差为1,那的找等差数列的 a1 吧,显然是个质数
内层循环就要循环所有的质数(显然不现实)这也是我觉得这题不严谨的地方,那就循环到一个很大的数100000,从这个质数开始,只要它之后的9个数字都是质数,那么最小公差就找到了。
//长度为10,等差素数列,求最小的公差
#include <stdio.h>
#include <iostream>
using namespace std;
bool isprime(long long int n){
int i;
for(i=2;i*i<n;i++){
if(n%i==0){
return false;
}
}
return true;
}
int main(){
//外层循环表示 公差,内层循环起始素数
long long int cha,i;
int flag;
for(cha=1;;cha++){//循环公差
for(i=2;i<100000;i++){//循环素数
if(isprime(i)){//是素数
flag=1;
while(flag!=10){
if(isprime(i+cha*flag))
flag++;
else
break;
}
if(flag==9){
printf("%d",cha);
return 0;
}
}
}
}
return 0;
}
别忘了改输出,怕超时。。。