题目不多说,直接上思路:
首先问题的关键是求最小的公差,那好,我们可以从公差为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;
}
别忘了改输出,怕超时。。。
该博客探讨了一种寻找长度为10且公差最小的等差素数列的方法。作者通过从公差1开始暴力枚举,并检查每个质数是否能形成一个包含10个连续质数的序列,来寻找最小的公差。代码实现中使用了一个isprime()函数来判断一个数是否为质数,并在找到满足条件的公差后立即输出结果,以避免超时。
等差素数列&spm=1001.2101.3001.5002&articleId=115259573&d=1&t=3&u=1fb6cd536e344980bfbc3d73a42cebeb)
173

被折叠的 条评论
为什么被折叠?



