1. 程式人生 > >[bzoj3309] DZY Loves Math

[bzoj3309] DZY Loves Math

題目大意

對於正整數n,定義f(n)為n所含質因子的最大冪指數。例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007)=1, f(1)=0。
給定正整數a,b,求ai=1bj=1f((i,j))

T≤10000
1≤a,b≤107

分析

看到兩個sigma和(i,j),就要條件反射想到莫比烏斯反演。
首先令a≤b
列舉公約數,得到:

Ans=d=1af(d)i=1adj=1bd[(i,j)=1]
Ans=d=1af(d)d=1adμ(d)addbdd
令T=dd’,得到:
Ans=T=1aaTbTd|Tf(d)m
u(Td)

g[T]=d|Tf(d)mu(Td),那麼只要預處理g陣列的字首和,就可以以根號的複雜度詢問了。
g陣列的預處理看起來是帶log的。但是根據莫比烏斯函式的性質,如果Td存在平方因子,函式值是等於0的,也就是對答案沒有貢獻。
那麼設T=p1k1p2k2...pmkm,T質因數的最大冪是k,那麼只有ki=k的質因數有用。又可以設Td=p1a1p2a2...pmam,其中ai[0,1]
可以發現f(d)只能取到k,k-1,現在令其中一個滿足ki=k的質因數為d的最大冪,如果f(d)=k,那麼ai=0,其它為0或1均可。然而一個a取0,就相當於給莫比烏斯函式乘1,取1就是乘-1。所以最終答案乘的係數是0。特殊情況:如果T是質數,乘的係數是1(因為沒有其它質因數了)。
如果f(d)=k-1,那麼ai=1,所有其它滿足ki=k的質因數也要讓對應的a值取1,這時剩下的質因數也和上面一樣,最後得到的係數是0。特殊情況:如果每個ki都等於k,那麼由於沒有剩下可以取0、1的質因數,它的係數也是1。
這樣就可以線性預處理了。
#include <cstdio>
#include <cstring> #include <algorithm> using namespace std; const int N=1e7; typedef long long LL; int T,mu[N+5],tot,p[N],f[N+5]; LL s[N+5],ans; bool bz[N+5]; char c; int read() { for (c=getchar();c<'0' || c>'9';c=getchar()); int x=c-48; for (c=getchar();c>='0'
&& c<='9';c=getchar()) x=x*10+c-48; return x; } int main() { mu[1]=1; for (int i=2;i<=N;i++) { if (!bz[i]) { mu[i]=-1; p[tot++]=i; } for (int j=0;j<tot && i*p[j]<=N;j++) { int I=i*p[j]; bz[I]=1; if (i%p[j]==0) { mu[I]=0; break; } mu[I]=-mu[i]; } } for (int i=2;i<=N;i++) if (mu[i]!=0) { for (LL j=i;j<=N;j*=i) s[j]=-mu[i]; } for (int i=1;i<=N;i++) s[i]+=s[i-1]; T=read(); while (T--) { int a=read(),b=read(); if (a>b) a^=b^=a^=b; ans=0; for (int i=1,j;i<=a;i=j+1) { j=min(a/(a/i),b/(b/i)); ans+=(s[j]-s[i-1])*(a/i)*(b/i); } printf("%lld\n",ans); } return 0; }

相關推薦

[BZOJ3309]DZY Loves Math

int log || love 其他 會有 最小值 不能 while 題面戳我 題意:多組數據,給出n,m,求 \[\sum_{i=1}^{n}\sum_{j=1}^{m}f(\gcd(i,j))\] 其中\(f(i)\)表示\(i\)所含質因子的最大冪指數。 例如\(f(

bzoj3309: DZY Loves Math

article spa memset ont 質因數 Go can type sdn 第三次復習反演。。。 感覺第二次學的時候還是有點用的 整理了下思路。可以去看一下我的blog 這題就是第二種類型的題。然而我不會化簡K。。%PoPoQQQ #include&l

[BZOJ3309]DZY Loves Math(莫比烏斯反演+線性篩)

質因子 不存在 pan init swap i++ () 包含 love $\sum\limits_{T=1}^{n}\lfloor\frac{n}{T}\rfloor\lfloor\frac{m}{T}\rfloor\sum\limits_{d|T}f(d)\mu(\fr

[bzoj3309] DZY Loves Math

題目大意 對於正整數n,定義f(n)為n所含質因子的最大冪指數。例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007)=1, f(1)=0。 給定正整數a,b,求∑ai=1∑bj=1f((i,j)) T≤10000 1≤a,b≤

BZOJ3309 DZY Loves Math

n-1 lse name tro std gcd bre n) turn BZOJ3309 DZY Loves Math 參考自這位大佬的推導思路以及這位大佬的實現思路 題目簡述 定義\(f(n)\)為\(n\)所含質因子的最大冪指數,如\(f(18)=f(2*3^2)=

bzoj3309DZY Loves Math 莫比烏斯反演+線性篩

例如 一行 根據 優化 long long ast 以及 -1 變化 題目描述 對於正整數x,定義f(x)為x所含質因子的最大冪指數。例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007)=1, f(1)=0。給定正整數n,m,求$\sum\li

BZOJ3309DZY Loves Math(莫比烏斯反演)

namespace ... ++ bre getchar stream 那種 getc 分解質 【BZOJ3309】DZY Loves Math(莫比烏斯反演) 題面 求 \[\sum_{i=1}^a\sum_{j=1}^bf(gcd(a,b))\] 其中,\(f(x)\)

BZOJ3309DZY Loves Math - 莫比烏斯反演

題意: 對於正整數n,定義$f(n)$為$n$所含質因子的最大冪指數。例如$f(1960)=f(2^3 * 5^1 * 7^2)=3$,$f(10007)=1$,$f(1)=0$。 給定正整數$a,b$,求 $$\sum\limits_{i=1}^{a}\sum\limits_{j=1}^{b}f(gcd

BZOJ3309DZY Loves Math 解題報告

n+1 fin 什麽 tput its ini con 打表 取值 【BZOJ3309】DZY Loves Math Description 對於正整數\(n\),定義\(f(n)\)為\(n\)所含質因子的最大冪指數。例如\(f(1960)=f(2^3×5^1×7^2)=

Bzoj3481 DZY Loves Math III

set return time calc() mil and main log solved Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 310 Solved: 65 Description Input

[BZOJ 3309]DZY Loves Math 莫比烏斯反演

2-2 color 答案 圖片 pan 組合 != clu 固定 還是需要看題解T-T 枚舉d=gcd(i,j),得到 好了現在就要處理後邊這個函數了,可以無腦求,不過107顯然會T,當然要O(n)了 然後我們就觀察這個函數。。大力分析一下µ可能會帶來

【bzoj3560】DZY Loves Math V 歐拉函數

print bsp sca tdi rac for lov microsoft class 題目描述 給定n個正整數a1,a2,…,an,求 的值(答案模10^9+7)。 輸入 第一行一個正整數n。 接下來n行,每行一個正整數,分別為a1,a2,

[bzoj3560] DZY Loves Math V

它的 strong name pre mit pla log line align Description 給定n個正整數a1,a2,…,an,求 \[ \sum\limits_{i_1|a_1} \sum\limits_{i_2|a_2} … \sum\limits_{i

BZOJ3561 - DZY Loves Math VI

ble php .com 根據 1=1 script source else http Portal Description 共\(T(T\leq3)\)組測試數據。給出\(n,m(n\leq5\times10^5)\),求 \[ \sum_{i=1}^n \sum_{j=

bzoj 3512: DZY Loves Math IV

質因子 ans last pac desc 就是 math 直接 bre Description 給定n,m,求 模10^9+7的值。 Solution 設 \(S(n,m)\) 表示 \(\sum_{i=1}^{m}\phi(n*i)\) \(Ans=\sum_{i=1

BZOJ3560: DZY Loves Math V(歐拉函數)

search 給定 com www. long long geo getch http desc Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 557 Solved: 318[Submit][Status][Discuss

【bzoj3512】DZY Loves Math IV 杜教篩+記憶化搜索+歐拉函數

-i script 等於 code inpu 給定 names 數據規模 次方 Description 給定n,m,求\(\sum_{i=1}^{n}\sum_{j=1}^{m}\varphi(ij)\)模10^9+7的值。 Input 僅一行,兩個整數n,m。 Outpu

【刷題】BZOJ 3512 DZY Loves Math IV

read oid init const tps clas int 基礎 http Description 給定n,m,求 模10^9+7的值。 Input 僅一行,兩個整數n,m。 Output 僅一行答案。 Sample Input 100000 1000000000 S

BZOJ3481 DZY Loves Math III(數論+Pollard_Rho)

() abs names 貢獻 urn sort get tchar spa   考慮對於每一個x有多少個合法解。得到ax+by=c形式的方程。如果gcd(x,y)|c,則a在0~y-1範圍內的解的個數為gcd(x,y)。也就是說現在所要求的是Σ[gcd(x,P)|Q]*g

bzoj 3309 DZY Loves Math —— 莫比烏斯反演+數論分塊

style std swa swap ont amp getchar() mes 分塊 題目:https://www.lydsy.com/JudgeOnline/problem.php?id=3309 憑著上課所講和與 Narh 討論推出式子來; 竟然是第一次寫數論分塊!所