当前位置: 代码迷 >> 综合 >> 重写_In_2021_第八届蓝桥杯大赛个人赛省赛(软件类)C语言B组_2
  详细解决方案

重写_In_2021_第八届蓝桥杯大赛个人赛省赛(软件类)C语言B组_2

热度:5   发布时间:2024-01-21 19:54:03.0

由于审核时,大段题目 文字和其他文章题目内容 重复,导致审核不过,所以这里题目略:

解题思路:暴力解法,三重for循环

AC代码:

#include <iostream>
#include <vector>
#include <algorithm>using namespace std;vector<long long> Primes;bool isPrime(long t){for(int i=2;i<t;i++){if(t%i==0)return false;}return true;}void getPrimesKnum(long K){//获得从2开始的前K个素数(K>=3)Primes.push_back(2);Primes.push_back(3);long cnt=2;for(int i=5;;i++){if(isPrime(i)){Primes.push_back(i);cnt++;}if(cnt==K)return;}}void getMinL(){//正向搜索,公差从小到大搜索for(long long i=0;i<Primes.size();i++){//从向量Primes的首元素开始long long start=Primes[i];for(long long delta=2;delta<=(Primes[Primes.size()-1]-start);delta++){//公差从2开始递增long long next=start;for(int times=2;times<=10;times++){next+=delta;if( find(Primes.begin(),Primes.end(),next) == Primes.end() )//没找到break;else if(next>Primes[Primes.size()-1] )//数值越界break;else if(times==10){cout<<"MinL="<<delta<<endl;return;}}}}}int main()
{getPrimesKnum(1000);getMinL();cout << "Hello world!" << endl;return 0;
}

 

  相关解决方案