记录编号 |
231089 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[BZOJ 2693] jzptab |
最终得分 |
100 |
用户昵称 |
mikumikumi |
是否通过 |
通过 |
代码语言 |
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;
}