UVALive5964 LCM Extreme 点击打开链接
UVA11426 GCD - Extreme (II) 点击打开链接
#include <iostream>
#include <cstdio>
#include <map>
#include <cmath>
#include <map>
#include <vector>
#include <algorithm>
#include <cstring>
#include <string>
using namespace std;
#define LL unsigned long long
#define maxn 5000005
LL mod=1<<64;
LL euler[maxn+5];
LL f[maxn+5];
void euler_init(){
memset(f,0,sizeof(f));
for(int i=0;i<=maxn;i++) euler[i]=i;
for(int i=2;i<=maxn;i++){
if(euler[i]==i){
for(int j=i;j<=maxn;j+=i){
euler[j]=euler[j]/i*(i-1);
}
}
for(int j=1;j*i<=maxn;j++){
f[i*j]+=j*i*euler[i]/2*i;
}
}
for(int i=2;i<=maxn;i++){
f[i]+=f[i-1];
}
}
int main()
{
euler_init();
int t,n;
scanf("%d",&t);
for(int j=1;j<=t;j++){
scanf("%d",&n);
LL ans=0;
cout<<"Case "<<j<<": "<<f[n]<<endl;
}
return 0;
}
#include <iostream>
#include <cstdio>
#include <map>
#include <cmath>
#include <map>
#include <vector>
#include <algorithm>
#include <cstring>
#include <string>
using namespace std;
#define LL long long
#define maxn 4000005
LL euler[maxn+5];
LL f[maxn+5];
void euler_init(){
memset(f,0,sizeof(f));
for(int i=0;i<=maxn;i++) euler[i]=i;
for(int i=2;i<=maxn;i++){
if(euler[i]==i){
for(int j=i;j<=maxn;j+=i){
euler[j]=euler[j]/i*(i-1);
}
}
for(int j=1;j*i<=maxn;j++){
f[i*j]+=euler[i]*j;
}
}
}
int main()
{
euler_init();
int n;
while(scanf("%d",&n),n){
LL ans=0;
for(int i=1;i<=n;i++){
ans+=f[i];
}
printf("%lld\n",ans);
}
return 0;
}