欢迎光临散文网 会员登陆 & 注册

UCF Local Programming Contest Round 1A E (7月26)

2021-07-26 18:57 作者:外号不可能是老眯  | 我要投稿

看了好几天,效率有点低,找了好几个的代码,都是有第段代码怎么看都看不懂。这让人很沮丧,后来又去找了给和我代码相近的代码,看完之后,又自己打了一遍,大概弄懂了。

题目:

给你三个数分别为S,E,K。求s到e的k个最小质数和

当初我看到这题是这样想的s e数量级是1e18用long long 然后一个f(x)函数0到x求余等于0就break,然后放到一个数组,代码打出来不行,想着各种求大数求最小质数的方法,最后硬是没用搞出来,泪目了。

后来看了很久代码,不是这个理,题目那个k很重要k<=0.9x(e-s+1),还有s+100《e这个,去网上查了,说是什么容斥原理,意思就是在题目给的范围,必有0.9x(e-s+1)个不是素数。然后问题就解决了。

代码:

#include<bits/stdc++.h>

//100000000000000000 100000000000000010 10 

using namespace std;

int p=0;

long long pr[1000005],a[1000005]={0};

bool ispr(int x)

{

if(x==1) return false;

for(int i=2;i*i<x;i++)

{

if(x%i==0) return false;

}

return true;

}

void getpr(void)

{

for(int i=1;i<500;i++)

{

if(ispr(i)) pr[p++]=i;

}

}

int main()

{

long long s,e,k,i,j,sum=0,p1=0;

cin>>s>>e>>k;

getpr();

for(i=s;i<=e;i++)

{

for(j=0;j<p;j++)

{

if(i%pr[j]==0) 

{

a[p1++]=pr[j];

break;

}

}

}

sort(a,a+p1);

for(i=0;i<k;i++)

{

sum+=a[i];

}

cout<<sum<<endl;

return 0;

}


以后碰到这种这种问题多试几种方法,别害怕失败,罚时不可怕。

UCF Local Programming Contest Round 1A E (7月26)的评论 (共 条)

分享到微博请遵守国家法律