1. 程式人生 > >loj #2000. 「SDOI2017」數字表格 (莫比烏斯)

loj #2000. 「SDOI2017」數字表格 (莫比烏斯)


程式碼:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN=1e6+5;
const int MOD=1e9+7;
bool check[MAXN+10]; 
int prime[MAXN+10],f[MAXN][2],sum[MAXN],in[MAXN];
int mu[MAXN+10];
ll qpow(ll a,ll b)
{
	ll ans=1;a%=MOD;
    for(ll i=b;i;i>>=1,a=a*a%MOD)
        if(i&1)ans=ans*a%MOD;
    return ans;
}
ll inv(ll x)
{
	return qpow(x,MOD-2);
}
void Moblus()
{
	memset(check,false,sizeof(check));
	mu[1]=1;sum[1]=1;
	int tot=0;
	f[1][0]=1,f[0][0]=0;
	f[1][1]=1,f[0][1]=1;
	for(int i=2;i<MAXN;i++)
	{
		f[i][0]=(f[i-1][0]+f[i-2][0])%MOD;
		f[i][1]=inv(f[i][0]);
	}
	for(int i=2;i<=MAXN;i++)
	{
		sum[i]=1;
		if(!check[i])
		{
			prime[tot++]=i;
			mu[i]=-1;
		}
		for(int j=0;j<tot;j++)
		{
			if(i*prime[j]>MAXN) 
				break;
			check[i*prime[j]]=true;
			if(i%prime[j]==0)
			{
				mu[i*prime[j]]=0;
				break;
			}
			else
			{
				mu[i*prime[j]]=-mu[i];
			}
		}
	}
	sum[0]=in[0]=1;
	for(int i=1;i<MAXN;i++)
	{
		for(int j=i;j<MAXN;j+=i)
		{
			if(mu[j/i]==-1)
				sum[j]=1LL*sum[j]*f[i][1]%MOD;
			if(mu[j/i]==1)
				sum[j]=1LL*sum[j]*f[i][0]%MOD;
		}
	}
	for(int i=1;i<MAXN;i++)
	{
		sum[i]=1LL*sum[i-1]*sum[i]%MOD;
		in[i]=inv(sum[i]);
	}
}
ll cal(int n,int m)
{
	ll ret=1;
	int last;
	if(n<m)
		swap(n,m);
	for(int i=1;i<=m;i=last+1)
	{
		last=min(n/(n/i),m/(m/i));
		ret=1LL*ret*qpow(1LL*sum[last]*in[i-1]%MOD,1LL*(n/i)*(m/i))%MOD;
	}
	return ret;
}
int main()
{
	//freopen("in.txt","r",stdin);
	//freopen("out.txt","w",stdout);
	Moblus();
	int T;
	scanf("%d",&T);
	while(T--)
	{
		int n,m;
		scanf("%d%d",&n,&m);
		printf("%lld\n",cal(n,m));
	}
	return 0;
}


相關推薦

loj #2000. SDOI2017數字表格

程式碼: #include<bits/stdc++.h> using namespace std; typedef long long ll; const int MAXN=1e

【BZOJ 4816】 4816: [Sdoi2017]數字表格

Doris剛剛學習了fibonacci數列。用f[i]表示數列的第i項,那麼 f[0]=0 f[1]=1 f[n]=f[n-1]+f[n-2],n>=2 Doris用老師的超級計算機生成了一個n×m的表格,第i行第j列的格子中的數是f[gcd(i,j)],其中gcd(i,j)表示i, j的最大公約數。

Crash的數字表格反演

轉化 com -m line sqrt spa 輸出 格子 但是 Crash的數字表格 Description 今天的數學課上,Crash小朋友學習了最小公倍數(Least Common Multiple)。對於兩個正整數a和b,LCM(a, b)表示能同時被a和b整除的最

bzoj2154 Crash的數字表格反演

Description 今天的數學課上,Crash小朋友學習了最小公倍數(Least Common Multiple)。對於兩個正整數a和b,LCM(a, b)表示能同時被a和b整除的最小正整數。例如,LCM(6, 8) = 24。回到家後,Crash還在想著課上學的東西,為了研究最

洛谷3704 [SDOI2017] 數字表格反演】

ont nbsp 產生 ID IV mod return esp SQ 題目分析: 比較有意思,但是套路的數學題。 題目要求$ \prod_{i=1}^{n} \prod_{j=1}^{m}Fib(gcd(i,j)) $. 註意到$ gcd(i,j) $有大量重復,采用莫比

[SDOI2017]數字表格+數論分塊】

%d true urn mes clu 題意 GC scanf ont 一句話題意: 求: $N=min(n,m)$ $\prod_{d=1}^{N}\prod_{i=1,j=1}^{n,m}f[d]*[gcd(i,j)=d]$ 把$f[d]$提出來: $=\p

【BZOJ4815】[CQOI2017]小Q的表格反演,分塊

【BZOJ4815】[CQOI2017]小Q的表格(莫比烏斯反演,分塊) 題面 BZOJ 洛谷 題解 神仙題啊。 首先\(f(a,b)=f(b,a)\)告訴我們矩陣只要算一半就好了。 接下來是\(b*f(a,a+b)=(a+b)*f(a,b)\) 這個式子怎麼看呢? \[\begin{aligned}

BZOJ2154/BZOJ2693/Luogu1829 Crash的數字表格/JZPFAR 反演

turn sin pre tps git mes mat lcm get 傳送門——Luogu 傳送門——BZOJ2154 BZOJ2693是權限題 其中JZPFAR是多組詢問,Crash的數字表格是單組詢問 先推式子(默認\(N \leq M\),所有分數下取整) \(

HDU6053

表示不懂啊,。挖個坑先 題意:求n個數,分別比給定n個數小,他們不是互質的情況有多少種。 題解::莫比烏斯容斥,,,,, #include<stdio.h> #include<std

LOJ #528. LibreOJ β Round #4求和 函式

題意 計算 ∑i=1n∑j=1mμ2(gcd(i,j))∑i=1n∑j=1mμ2(gcd(i,j)) (mod(mod 998244353)998244353) 題解 ∑d=1nμ2(d)

CO-PRIME初探 NYOJ1066經典gcda,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

BZOJ 2301: [HAOI2011]Problem b反演

計算 algo cto ref blog image get txt += http://www.lydsy.com/JudgeOnline/problem.php?id=2301 題意:對於給出的n個詢問,每次求有多少個數對(x,y),滿足a≤x≤b,c&l

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

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)

數論18——反演定理反演

技術分享 滿足 urn spa isp name 角速度 我們 組成 莫比烏斯反演也是反演定理的一種 既然我們已經學了二項式反演定理 那莫比烏斯反演定理與二項式反演定理一樣,不求甚解,只求會用 莫比烏斯反演長下面這個樣子(=?ω?=) d|n,表示

【HDU1695】GCD反演

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

【Luogu3455】【POI2007】ZAP-Queries反演

stream bre 似的 string 獲得 計算 getc ans contain 【Luogu3455】【POI2007】ZAP-Queries(莫比烏斯反演) 題面 題目描述 FGD正在破解一段密碼,他需要回答很多類似的問題:對於給定的整數a,b和d,有多少正整數對

【CF900D】Unusual Sequences 容斥反演

div blog mic names include sin 題意 方案 ace 【CF900D】Unusual Sequences 題意:定義正整數序列$a_1,a_2...a_n$是合法的,當且僅當$gcd(a_1,a_2...a_n)=x$且$a_1+a_2+...

【BZOJ3309】DZY Loves Math反演

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

bzoj3994: [SDOI2015]約數個數和反演+分塊

put name 一行 AI algorithm scan space 代碼 print www.cnblogs.com/shaokele/ bzoj3994: [SDOI2015]約數個數和   Time Limit: 20 Sec   Memory Limit: 1