UVALive5964 LCM Extreme && UVA11426 GCD

来源:互联网 发布:淘宝开店在哪里申请 编辑:程序博客网 时间:2024/05/17 23:19

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 5000005LL 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 4000005LL 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;}

0 0