wei 题解分享 · 2024/4/18
等差素数列(结果填空) - 题解
```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
acmer10 题解分享 · 2024/4/5
等差素数列(结果填空) - 题解
``` #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