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