题解分享
题解分享简介
等差素数列(结果填空) - 题解
```Java
public class SuShu {
public static void main(String[] args) {
/*
* 思路:
* 先把10万以内的素数找出来;
* 然后挨个遍历,以每一个素数为开头的等差数列,
* 暴力遍历所有的差值1000以内即可
* 然后统计等差数列的长度,达到10就保存差值,全局保存最小的那个。
* 最后输出即可
* */
int n =1000100;
//埃氏筛晒出n以内的所有素数
boolean[] numbers = new boolean[n+1];
for (int i =2 ; i <= n;i++) {
if(!numbers[i]){
int temp = i+i;
while(temp<=n){
numbers[temp] = true;
temp +=i;
}
}
}
//以k为开头的等差数列
int min = Integer.MAX_VALUE;
for (int k =2 ; k <= n; k++) {
if(!numbers[k]){//是素数才进行计算
for (int i =3; i <= 10000; i++) {//遍历所有的差值
int count = 0;//统计等差数量长度
int temp = k;
while (temp<=n&&!numbers[temp]){
temp +=i;
count++;
if(count==10){
min = Math.min(min,i);
}
}
}
}
}
System.out.println(min);
}
}
```
查看全文
0
0
0
4
等差素数列(结果填空) - 题解
```
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
#define N 1000000
bool check(int x)
{
if(x<=1)return false;
for(int i=2;i<=x/i;i++) if(x%i==0)return false;
return true;
}
int a[N];
int main()
{
int len=0;
for(int i=2;i<100000;i++)
{
if(check(i))
{
a[len]=i;
len++;
}
}
int cnt=0;
for(int d=2;d<=1000;d++)
{
for(int i=1;i<len;i++)
{
bool flag=false;
for(int j=1;j<=9;j++)
{
if(!check(a[i]+j*d))
{
flag=true;
break;
}
}
if(!flag)
{
cout<<d<<endl;
return 0;
}
}
}
return 0;
}
```
查看全文
0
0
0
4



