• [SDOI2015]约数个数和


     出处:http://www.cnblogs.com/peng-ym/p/8667321.html

    题目:  链接:https://www.luogu.org/problemnew/show/P3327

    思路: 首先对于 d(x) 有个 性质  : 

                然后开始推:1.先设  

                                      2.

                                     3.

                                     4.  (从 3 到4  用到了 莫比乌斯的一个性质:

                                     5. 

                                     6. 

                                     7.

                                     8. 

    #include<bits/stdc++.h>
    #define LL long long
    #define ULL unsigned long long
    #define rep(i,j,k) for(int i=j;i<=k;i++)
    #define dep(i,j,k) for(int i=k;i>=j;i--)
    #define INF 0x3f3f3f3f
    #define mem(i,j) memset(i,j,sizeof(i))
    #define make(i,j) make_pair(i,j)
    #define pb push_back
    using namespace std;
    const int N=5e4+5;
    int sum[N],pre[N],mu[N],tot;
    bool vis[N];
    LL tmp[N];
    void init() {
        mu[1]=1;
        rep(i,2,N-5) {
            if(!vis[i]) { pre[++tot]=i; mu[i]=-1; }
            for(int j=1;j<=tot&&pre[j]*i<=N-5;j++) {
                vis[i*pre[j]]=1;
                if(i%pre[j]==0) break;
                mu[i*pre[j]]=-mu[i];
            }
        }
        rep(i,1,N-5) sum[i]=sum[i-1]+mu[i];
        rep(i,1,N-5) {
            for(int l=1,r;l<=i;l=r+1) {
                r=i/(i/l);
                tmp[i]+=1LL*(r-l+1)*(i/l);
            }
        }
    }
    int main() {
        init();
        int t,n,m;
        scanf("%d",&t);
        while(t--) {
            scanf("%d %d",&n,&m);
            LL ans=0;
            for(int l=1,r;l<=min(n,m);l=r+1) {
                r=min(n/(n/l),m/(m/l));
                ans+=(sum[r]-sum[l-1])*1LL*tmp[n/l]*tmp[m/l];
            }
            printf("%lld
    ",ans);
        }
        return 0;
    }
    View Code
    一步一步,永不停息
  • 相关阅读:
    windows 11下载地址
    ubuntu 安装无线网卡驱动
    修复因为安装openssl 1.0.0而导致使用ssh和scp产生警告信息
    vim下Java自动补全插件javacomplete
    mysql 配置多实例(mysqld_multi)
    nagios 整合 ganglia 设置邮件、短信报警
    Linux (ubuntu 10.10) 安装两个MySQL
    HDU 3269 P2P File Sharing System
    ubuntu 10.10 安装 sun java
    闲逛计算机系统(一):从HelloWorld说起
  • 原文地址:https://www.cnblogs.com/Willems/p/10917473.html
Copyright © 2020-2023  润新知