Bi-shoe and Phi-shoe LightOJ - 1370
阿新 • • 發佈:2018-11-09
題意:給一些數Ai(第 i 個數),Ai代表的是某個數尤拉函式的值,我們要求出數 Ni 的尤拉函式值不小於Ai。而我們要求的就是這些 Ni 這些數字的和sum,而且我們想要sum最小,求出sum最小多少。
思路: 要求和最小,我們可以讓每個數都儘量小,那麼我們最後得到的肯定就是一個最小值。給定一個數的尤拉函式值ψ(N),我們怎麼樣才能求得最小的N?我們知道,一個素數P的尤拉函式值ψ(P)=P-1。所以如果我們知道ψ(N),那麼最小的N就是最接近ψ(N),並且大於ψ(N)的素數。我們把所有素數打表之後再判斷就可以了。
AC程式碼:
#include<cmath> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int maxn = 1e6+10; typedef long long ll; int book[maxn]; void init() { memset(book,0,sizeof(book)); for(int i = 2; i <= maxn; i++) { if(book[i]==0) for(int j = i+i; j <= maxn; j += i) book[j] = 1; } } int main(void) { init(); int t; scanf("%d",&t); for(int i = 1; i <= t; i++) { int n; cin>>n; ll sum = 0; while(n--) { int x; cin>>x; for(int i = x+1; ; i++) { if(book[i]==0) { sum += i; break; } } } printf("Case %d: %lld Xukha\n",i,sum); } return 0; }