记录编号 531961 评测结果 AAAAAAAAAAAAAAAAAAAAAAAAA
题目名称 [UVA 11426] [济南集训 2017] 求gcd之和 最终得分 100
用户昵称 Gravatar欧鹰 是否通过 通过
代码语言 C++ 运行时间 7.263 s
提交时间 2019-05-22 15:46:08 内存使用 175.78 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#define int long long
using namespace std;
const int MAXN = 10000007;
const int MOD = 998244353;
int read(){
    int w=1,x=0,ch=getchar();
    for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')w=-1;
    for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';
    return x*w;
}
bool isprime[MAXN];
int prime[MAXN],phi[MAXN],n,m,cnt;
void Euler(int n){
    memset(isprime,true,sizeof(isprime));
    phi[1]=1;
    for(int i=2;i<=n;i++){
        if(isprime[i]){
            prime[++cnt]=i;
            phi[i]=i-1;
        }
        for(int j=1;j<=cnt;j++){
            if(prime[j]*i>n)break;
            isprime[i*prime[j]]=false;
            if((i%prime[j])==false){
            	phi[i*prime[j]]=prime[j]*phi[i];
        		break;
			}
			else phi[i*prime[j]]=(prime[j]-1)*phi[i];
        }
    }
}
int ans=0;
signed main(){
	freopen("hoip.in","r",stdin);
	freopen("hoip.out","w",stdout);
	n=read(),m=read();
    Euler(MAXN-1);
    for(int d=1;d<=min(n,m);d++)ans+=phi[d]*(n/d)%MOD*(m/d)%MOD,ans%=MOD;
    printf("%lld",ans);
    return 0;
}