Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
54914 | seanlsy | 因子和 | C++ | 运行超时 | 40 | 2000 MS | 256 KB | 917 | 2022-08-08 11:29:31 |
#include <bits/stdc++.h> using namespace std; #define mod 998244353 inline int read(){ int x=0;bool f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-') f=0;ch=getchar();} while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+(ch^48),ch=getchar(); return f?x:-x; } int t,a,b,cnt,res,ans,p[30],k[30]; inline int Pow(int x,int y){ int res=1; while(y){ if(y&1) res=1ll*res*x%mod; x=1ll*x*x%mod; y>>=1; } return res; } inline int sum(int x){ return 1ll*(Pow(p[x],b*k[x]+1)-1)*Pow(p[x]-1,mod-2)%mod; } int main(){ // freopen("sumdiv.in","r",stdin); // freopen("sumdiv.out","w",stdout); t=read(); while(t--){ a=read(),b=read(),cnt=0,ans=1; for(int i=2;i*i<=a;i++) if(!(a%i)){ p[++cnt]=i,k[cnt]=0; while(!(a%i)) a/=i,k[cnt]++; } if(a^1) p[++cnt]=a,k[cnt]=1; for(int i=1;i<=cnt;i++) ans=1ll*ans*sum(i)%mod; printf("%d\n",ans); } return 0; }