zoukankan      html  css  js  c++  java
  • GCD SUM 强大的数论,容斥定理

    GCD SUM

    Time Limit: 8000/4000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others)
    SubmitStatus

    Problem Description

    给出N,M
    执行如下程序:
    long long  ans = 0,ansx = 0,ansy = 0;
    for(int i = 1; i <= N; i ++)
       for(int j = 1; j <= M; j ++)
           if(gcd(i,j) == 1) ans ++,ansx += i,ansy += j;
    cout << ans << " " << ansx << " " << ansy << endl;

    Input

    多组数据,每行两个数N,M(1 <= N,M <= 100000)。

     

    Output

    如题所描述,每行输出3个数,ans,ansx,ansy,空格隔开

    Sample Input

    5 5
    1 3

    Sample Output

    19 55 55
    3 3 6

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    using namespace std;
    #define MAX 100010
    #define ll long long
    ll mu[MAX]= {0},mb[MAX]= {0};
    void init()
    {
        int i,j;
        for(i=2; i<MAX; i++)
        {
            if(!mu[i])
            {
                mu[i]=i;
                if(i>1000)continue;
                j=i*i;
                while(j<MAX)
                {
                    mu[j]=i;
                    j+=i;
                }
            }
        }
        mu[1]=1;
        for(i=2; i<MAX; i++)
        {
            if((i/mu[i])%mu[i]==0)mu[i]=0;
            else mu[i]=-mu[i/mu[i]];
        }
        for(i=1; i<MAX; i++)
        mb[i]=mu[i]*i,mu[i]+=mu[i-1],mb[i]+=mb[i-1];
    }
    void solve(int n,int m)
    {
        ll ans,ansx,ansy,x,y;
        ans=ansx=ansy=0;
        int i,j,k;
        for(i=(n>m?m:n);i>0;)
        {
            x=n/i,y=m/i;
            k=max(n/(x+1),m/(y+1));
            ans+=x*y*(mu[i]-mu[k]);
            ansx+=(mb[i]-mb[k])*y*(1+x)*x/2;
            ansy+=(mb[i]-mb[k])*x*(1+y)*y/2;
            i=k;
        }
        printf("%lld %lld %lld
    ",ans,ansx,ansy);
    }
    int main()
    {
        init();
        int n,m;
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            solve(n,m);
        }
    }


  • 相关阅读:
    Shell 脚本读取文件中的每行
    Linux中的内存管理机制
    CPU Cache 学习(一)
    linux系统层次(转)
    linux下的一些常用命令
    几个关于Linux进程fork()的题目
    GDB调试工具
    POSIX thread library 简介I
    Scheme Programming language II
    Google Chrome浏览器标签页之间的自动切换
  • 原文地址:https://www.cnblogs.com/hosealeo/p/4190480.html
Copyright © 2011-2022 走看看