题意:
给你一些数,对于每一个
求出数
且
的欧拉函数的值不小于
,并且是所有的N的和加起来最小。
欧拉函数板子题。
MyCode:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e6+7;
int prime[maxn],vis[maxn],phi[maxn];
inline ll read() {
ll s = 0, w = 1;
char ch = getchar();
while (ch < 48 || ch > 57) {
if (ch == '-') w = -1;
ch = getchar();
}
while (ch >= 48 && ch <= 57)
s = (s << 1) + (s << 3) + (ch ^ 48), ch = getchar();
return s * w;
}
void initial(const int n=1e6+5) {
int cnt=0; phi[1]=1;
for(int i=2;i<=n;i++) {
if(vis[i]==0) { prime[++cnt]=i; phi[i]=i-1;vis[i]=i; }
for(int j=1;j<=cnt;j++) {
if(prime[j]>vis[i]||i*prime[j]>n) break;
vis[i*prime[j]]=prime[j];
if(i%prime[j]==0) {
phi[i*prime[j]]=phi[i]*prime[j];
break;
}
else phi[i*prime[j]]=phi[i]*(prime[j]-1);
}
}
}
int a[maxn];
int main() {
initial();
int t=read(),cas=0;
while(t--) {
int n=read();
ll ans=0;
for(int i=1;i<=n;++i) a[i]=read();
sort(a+1,a+1+n);
for(int i=1,j=2;i<=n;++i) {
while(phi[j]<a[i]) ++j;
ans+=j;
}
printf("Case %d: %lld Xukha\n", ++cas, ans);
}
return 0;
} 
京公网安备 11010502036488号