bzoj2693: jzptab

来源:互联网 发布:下载截图软件 编辑:程序博客网 时间:2024/05/21 10:34

链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2693

题意:中文题。。

分析:同bzoj2301,莫比乌斯论文题。。

代码:

#include<map>#include<set>#include<cmath>#include<queue>#include<math.h>#include<cstdio>#include<vector>#include<string>#include<cstring>#include<iostream>#include<algorithm>#pragma comment(linker, "/STACK:102400000,102400000")using namespace std;const int N=10000010;const int MAX=151;const long long MOD=100000009;const int MOD1=100000007;const int MOD2=100000009;const int INF=2100000000;const double EPS=0.00000001;typedef long long ll;typedef unsigned long long uI64;int read(){    int x=0,f=1;char ch=getchar();    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}    return x*f;}int a[N],bo[N],mu[N];ll f[N],sum[N];void deal() {    int i,j,k,w,n=10000000;    memset(bo,0,sizeof(bo));    f[1]=mu[1]=1;sum[0]=k=0;    for (i=2;i<=n;i++) {        if (!bo[i]) { a[++k]=i;f[i]=1-i;mu[i]=-1; }        for (j=1;j<=k;j++) {            if ((ll)a[j]*i>n) break ;            bo[a[j]*i]=1;f[a[j]*i]=(f[a[j]]*f[i])%MOD;            if (i%a[j]==0) {                f[a[j]*i]=f[i];mu[a[j]*i]=0;break ;            }            mu[a[j]*i]=-mu[i];        }    }    for (i=1;i<=n;i++) sum[i]=(sum[i-1]+(i*f[i])%MOD)%MOD;}ll get(int n,int m) {    ll ret1,ret2;    ret1=((ll)(n+1)*n/2)%MOD;    ret2=((ll)(m+1)*m/2)%MOD;    return (ret1*ret2)%MOD;}ll getans(int n,int m) {    int i,last;    ll ret=0;    if (n>m) { n^=m;m^=n;n^=m; }    for (i=1;i<=n;i=last+1) {        last=min(n/(n/i),m/(m/i));        ret=(ret+(sum[last]-sum[i-1])*get(n/i,m/i)%MOD)%MOD;    }    return ret;}int main(){    int n,m,t;    ll ans;    scanf("%d", &t);    deal();    while (t--) {        scanf("%d%d", &n, &m);        ans=getans(n,m);        printf("%lld\n", (ans+MOD)%MOD);    }    return 0;}/*104 510000000 10000000*/


0 0
原创粉丝点击