UCF Local Programming Contest Round 1A E (7月26)
看了好幾天,效率有點低,找了好幾個的代碼,都是有第段代碼怎么看都看不懂。這讓人很沮喪,后來又去找了給和我代碼相近的代碼,看完之后,又自己打了一遍,大概弄懂了。
題目:

當(dāng)初我看到這題是這樣想的s e數(shù)量級是1e18用long long 然后一個f(x)函數(shù)0到x求余等于0就break,然后放到一個數(shù)組,代碼打出來不行,想著各種求大數(shù)求最小質(zhì)數(shù)的方法,最后硬是沒用搞出來,淚目了。
后來看了很久代碼,不是這個理,題目那個k很重要k<=0.9x(e-s+1),還有s+100《e這個,去網(wǎng)上查了,說是什么容斥原理,意思就是在題目給的范圍,必有0.9x(e-s+1)個不是素數(shù)。然后問題就解決了。
代碼:
#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;
}
以后碰到這種這種問題多試幾種方法,別害怕失敗,罰時不可怕。