|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
P5723 【深基4.例13】质数口袋 - 洛谷
- // #include <bits/stdc++.h>
- #include <iostream>
- #include <vector>
- using namespace std;
- // 求质数数组之和
- int sums(vector<int>& v){
- int sumv = 0;
- for (auto i:v){
- sumv += i;
- }
- return sumv;
- }
- // 判断下一个数是否为质数
- bool isPrime(vector<int>&v, int vb){
- for (auto i:v){
- if (vb%i == 0){
- return false;
- }
- }
- return true;// 不能被之前的质数整除,则为质数
- }
- void addPrime(vector<int>& v){
- int vb = v.back() + 1;//从最后一个质数加1开始
- vb = vb%2?vb:vb+1;// 质数除了2,都是奇数
- while(1){
- if (isPrime(v,vb)){
- v.push_back(vb);
- break;// 一次只添加一个质数
- }
- vb += 2;// 确保vb为奇数
- }
- }
- int main(){
- int L;
- cin>>L;
- vector<int> primes = {2};//初始化质数数组,从2开始
- while (sums(primes) <= L){
- addPrime(primes);//一次添加一个质数
- }
- // 获得的质数数组之和大于L,删除最后一个质数
- primes.pop_back();
- for(auto i : primes){
- cout<<i<<endl;
- }
- cout<<primes.size();
- return 0;
- }
复制代码
继续学习
|
|