记录编号 | 231089 | 评测结果 | AAAAAAAAAA | ||
---|---|---|---|---|---|
题目名称 | [BZOJ 2693] jzptab | 最终得分 | 100 | ||
用户昵称 | 是否通过 | 通过 | |||
代码语言 | C++ | 运行时间 | 31.001 s | ||
提交时间 | 2016-02-25 08:56:57 | 内存使用 | 124.37 MiB | ||
#include<cstdio> #include<cmath> #include<iostream> using namespace std; const int SIZET=10000,SIZEN=10000010; typedef long long LL; const LL MOD=100000009; int n[SIZET],m[SIZET]; int maxn=0; int mu[SIZEN]; int f[SIZEN]; bool co[SIZEN]={0}; int pri[SIZEN],cnt=0; void prepare() { mu[1]=f[1]=1; for(int i=2;i<=maxn;i++) { if(!co[i]) pri[++cnt]=i,mu[i]=-1,f[i]=1-i+MOD; for(int j=1;j<=cnt&&pri[j]*i<=maxn;j++) { co[i*pri[j]]=1; if(i%pri[j]==0) { mu[i*pri[j]]=0; f[i*pri[j]]=f[i]; break; } f[i*pri[j]]=(LL)f[i]*f[pri[j]]%MOD; } } f[0]=0; for(int i=1;i<=maxn;i++) f[i]=(f[i-1]+(LL)f[i]*i)%MOD; //for(int i=1;i<=maxn;i++) cout<<f[i]<<endl; } void clac(LL N,LL M) { LL j=0; LL ans=0; for(LL i=1;i<=min(N,M);i=j+1) { j=min(N/(N/i),M/(M/i)); ans+=((f[j]-f[i-1]+MOD)%MOD*(((N/i)*(N/i+1)/2%MOD*((M/i)*(M/i+1)/2%MOD)%MOD)%MOD))%MOD; ans%=MOD; } ans%=MOD; printf("%lld\n",ans); } int main() { freopen("bzoj_2693.in","r",stdin); freopen("bzoj_2693.out","w",stdout); int T; scanf("%d",&T); for(int i=1;i<=T;i++) { scanf("%d%d",&n[i],&m[i]); maxn=max(maxn,min(n[i],m[i])); } prepare(); for(int i=1;i<=T;i++) clac(n[i],m[i]); return 0; }