1. 程式人生 > >ACdream 1148 GCD SUM (久違的莫比烏斯)

ACdream 1148 GCD SUM (久違的莫比烏斯)

#include 
#include 
#include 
using namespace std;
typedef long long ll;

const int N = 100000+5;
int pri[N], mu[N], pnum, presum[N];
ll presum2[N];
bool vis[N];

void mobius(int n) {
    mu[1] = 1; pnum = 0;
    for(int i = 2;i <= n; i++) {
        if(!vis[i]) {
            pri[pnum++] = i;
            mu[i] = -1;
        }
        for(int j = 0;j < pnum; j++) {
            if(i*pri[j] > n)    break;
            vis[i*pri[j]] = 1;
            if(i%pri[j] == 0) {
                mu[i*pri[j]] = 0;
                break;
            }
            mu[i*pri[j]] = -mu[i];
        }
    }
    for(int i = 1;i <= n; i++) {
        presum2[i] = presum2[i-1] + i*mu[i];
    }
    for(int i = 1;i <= n; i++)  presum[i] = presum[i-1]+mu[i];
}

int n, m;

bool input() {
    return scanf("%d%d", &n, &m) == 2;
}

void solve() {
    int top = min(n, m);
    ll ans = 0, ansx = 0, ansy = 0;
    for(int i = 1;i <= top; i++) {
        int tmp1 = n/i, tmp2 = m/i;
        int nxt = min(n/tmp1, m/tmp2);
        //printf("i = %d tmp1 = %d tmp2 = %d nxt = %d\n", i, tmp1, tmp2, nxt);
        ans += (ll)(n/i)*(m/i)*(presum[nxt]-presum[i-1]);
        ansx += (ll)m/i*(n/i + (ll)n/i*(n/i))/2*(presum2[nxt] - presum2[i-1]);
        ansy += (ll)n/i*(m/i + (ll)m/i*(m/i))/2*(presum2[nxt] - presum2[i-1]);
        i = nxt;
    }
    printf("%lld %lld %lld\n", ans, ansx, ansy);
}

int main() {
    mobius(100000);
    while(input()) {
        solve();
    }
    return 0;
}

相關推薦

ACdream 1148 GCD SUM (久違)

#include #include #include using namespace std; typedef long long ll; const int N = 100000+5; int pri[N], mu[N], pnum, presum[N]; ll presum2[N]; bool v

SPOJ - PGCD Primes in GCD Table(反演)

cnblogs -s def problems 前綴和 ret mage () eof http://www.spoj.com/problems/PGCD/en/ 題意: 給出a,b區間,求該區間內滿足gcd(x,y)=質數的個數。 思路: 設f(n)為 gc

【Project Euler】530 GCD of Divisors 反演

rac 困難 efi pan opened can tps blank 分塊 【題目】GCD of Divisors 【題意】給定f(n)=Σd|n gcd(d,n/d)的前綴和F(n),n=10^15。 【算法】莫比烏斯反演 【題解】參考:任之洲數論函數.pdf 這個範圍

HDU - 4675 GCD of Sequence (反演+組合數學)

gcd namespace 新的 ++i else if include 莫比烏斯 code mod 題意:給出序列[a1..aN],整數M和k,求對1-M中的每個整數d,構建新的序列[b1...bN],使其滿足: 1. \(1 \le bi \le M\) 2. \(gc

CO-PRIME(初探 )NYOJ1066(經典)gcd(a,b)=1

put size 兩個 test hat ott == clas otto CO-PRIME 時間限制:1000 ms | 內存限制:65535 KB 難度:3 描寫敘述 This problem is so easy! Can you solve it

hdu 1695 GCD入門)

技術分享 sin urn cas str 由於 ons pre () 題意:求a<=x<=b ,x<=y<=d,中gcd(x,y)==k的數對個數 思路:題目可以轉化成求1<=x<=b/k,1<=y<=d/k中gcd(x,y)

【HDU1695】GCD反演)

重復 min put clas 題解 iostream fine har clu 【HDU1695】GCD(莫比烏斯反演) 題面 題目大意 求\(a<=x<=b,c<=y<=d\) 且\(gcd(x,y)=k\)的無序數對的個數 其中,你可以假定\(

【bzoj2820】YY的GCD 反演

spa tex 給定 void fin include ans iostream while YY的GCD Description 神犇YY虐完數論後給傻×kAc出了一題 給定N, M,求1<=x<=N, 1<=y<=M且g

cf 990G GCD Counting (反演 並查集)

In http 自己 har urn merge cto count read 990G 給你一棵樹,問你有多少個點對(x,y)(x\(\leq\)y),使得(x,y)簡單路徑上的點權值的\(gcd\)為\(i\),對於\(i\in [1,200000]\)輸出點對數目。

BZOJ 2820 YY的GCD 反演

cstring std swap cst pac lap Go hint name 2820: YY的GCD Description 神犇YY虐完數論後給傻×kAc出了一題給定N, M,求1<=x<=N, 1<=y<=

[HDU1695]GCD + [HAOI2011]Problem b + [POI2007]ZAP-Queries【反演】

最終 floor line cas pri int += problem cpp [HDU1695]GCD [HAOI2011]Problem b [POI2007]ZAP-Queries 令\[ans(n, m)=\sum_{i=1}^n\sum_{j=1}^m[GCD(

YY的GCD反演】

for amp spl .org init www. ref min r+ [Luogu2257]YY的GCD 求\(\sum_{i=1}^n\sum_{j=1}^m[(x, y)\)為質數\(]\) \(T \le {10}^4, 1\le n, m \le {10}^7

洛谷P2257 YY的GCD反演)

rac long pan min rim tdi ++ urn problem 傳送門 原來……莫比烏斯反演是這麽用的啊……(雖然仍然不是很明白) 首先,題目所求如下$$\sum_{i=1}^n\sum_{j

P2257 YY的GCD反演)

cstring ctype ... space problem get pct pre div P2257 YY的GCD luogu題解第一篇非常棒,當然你也可以point here(轉) 正題因為題解寫的太優秀所以沒得補充 這裏用了一個卡常技巧:循環展開 就是以代

UVA11426 GCD - Extreme (II) (尤拉函式/反演)

UVA11426 GCD - Extreme (II) 題目描述 PDF 輸入輸出格式 輸入格式: 輸出格式: 輸入輸出樣例 輸入樣例#1: 10 100 200000 0 輸出樣例#1: 67 13015 143295493160 Solution 這道題我用莫比烏斯反演和尤拉函式都寫了一遍,發現

【HDU 1695】GCD反演)

GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 16412 Accepted Submission(s): 6314 Pro

BZOJ 2820: YY的GCD [反演]

題解: 和上一題相同的函式:   為滿足且和的的對數   為滿足且和的的對數 顯然,反演後得到   可以列舉每一個質數,套用上一題的做法,p相當於k,d*p也就是p的倍數了...很像上一題我WT1中的式子   其實d只要列舉到min(

Gcd HYSBZ - 2818 (反演)

Gcd  HYSBZ - 2818  給定整數N,求1<=x,y<=N且Gcd(x,y)為素數的 數對(x,y)有多少對.   Input 一個整數N Output 如題 Sample Input 4 Sample O

luogu2257 YY的GCD反演)

luogu2257 題目描述:神犇YY虐完數論後給傻×kAc出了一題      給定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)為質數的(x, y)有多少對      kAc這種傻×必然不會了,於是向你來請教……      多組輸入 輸入格式:第一行一個整數T

反演 HDU1695 GCD

莫比烏斯函式 【通俗理解】 我們手裡有兩個函式,不妨F(x)和f(x),且F(x)是易知的,滿足上述(1)(2)中任意一個,則我們可以通過莫比烏斯反演得出f(n)的函式值。 【例題 HDU 1695