1. 程式人生 > >BZOJ 1101([POI2007]Zap-滿足x

BZOJ 1101([POI2007]Zap-滿足x

1101: [POI2007]Zap

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 1646  Solved: 577
[Submit][Status][Discuss]

Description

FGD正在破解一段密碼,他需要回答很多類似的問題:對於給定的整數a,b和d,有多少正整數對x,y,滿足x<=a,y<=b,並且gcd(x,y)=d。作為FGD的同學,FGD希望得到你的幫助。

Input

第一行包含一個正整數n,表示一共有n組詢問。(1<=n<= 50000)接下來n行,每行表示一個詢問,每行三個正整數,分別為a,b,d。(1<=d<=a,b<=50000)

Output

對於每組詢問,輸出到輸出檔案zap.out一個正整數,表示滿足條件的整數對數。

Sample Input

2
4 5 2
6 4 3

Sample Output

3
2

HINT

對於第一組詢問,滿足條件的整數對有(2,2),(2,4),(4,2)。對於第二組詢問,滿足條件的整數對有(6,3),(3,3)。

Source


本題為mobius反演:

PS:計算過程不能用long long 不然TLE

公式推導

這部分讓我們看看PoPoQQQ的PPT《莫比烏斯反演》












#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<functional>
#include<iostream>
#include<cmath>
using namespace std;
#define For(i,n) for(int i=1;i<=n;i++)
#define Fork(i,k,n) for(int i=k;i<=n;i++)
#define MEM(a) memset(a,0,sizeof(a));
#define MAXN (50000+10) 
typedef long long ll;
int p[MAXN]={0},tot;
bool b[MAXN]={0};
int mu[MAXN]={0},sum[MAXN]={0};

inline int read()
{
	int x=0,f=1;char ch=getchar();
	while(ch<'0'&&ch>'9') { if (ch=='-') f=-1; ch=getchar(); }
	while(ch>='0'&&ch<='9') { x=x*10+ch-'0'; ch=getchar(); }
	return x*f;
}

void make_prime(int n)
{
	tot=0; mu[1]=1;
	Fork(i,2,n)
	{
		if (!b[i]) p[++tot]=i,mu[i]=-1;
		For(j,tot)
		{
			if (i*p[j]>n) break;
			b[i*p[j]]=1;
			if (i%p[j]==0) { mu[i*p[j]]=0; break; }
			mu[i*p[j]]=-mu[i];  
		}
	}
	sum[0]=0;
	For(i,n) sum[i]=sum[i-1]+mu[i];
}
int n,m,d;
int calc() {
	int ans=0;
	
	for(int i=1,last=1;i<=n;i=last+1) {
		last=min(n/(n/i),m/(m/i));
		ans+=(sum[last]-sum[i-1])*(n/i)*(m/i);
		
	}
	printf("%d\n",ans);
	return ans;
}

int main()
{
//	freopen("bzoj1101.in","r",stdin);
	MEM(p) MEM(b) MEM(mu) MEM(sum)
	
	int N = 50000;
	make_prime(N); 
	
	
	int T;T=read();
	while(T--)
	{
		n=read(); m=read(); d=read();  if (n>m) swap(n,m);
		n/=d,m/=d;
		calc();
	}
	
	return 0;
}


相關推薦

BZOJ 1101([POI2007]Zap-滿足x

1101: [POI2007]Zap Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1646  Solved: 577 [Submit][Stat

BZOJ 1101: [POI2007]Zap(莫比烏斯反演)

傳送門 解題思路   \[ \sum\limits_{i=1}^n\sum\limits_{j=1}^mgcd(i,j)=k \] \[ \sum\limits_{i=1}^{\frac{n}{m}}\sum\limits_{j=1}^{\frac{m}{k}}gcd(i,j)=1 \] \[ \su

1101: [POI2007]Zap

typedef 同學 break void () pre bmi ref blank 1101: [POI2007]Zap Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2904 Solved: 1267[Submi

BZOJ#1101. Zap

emp get rim code can scan 多少 enter ont 1101: [POI2007]Zap Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3052 Solved: 1348 Descript

bzoj 1101 Zap —— 莫比烏斯反演

div spa targe ini bsp cstring bool con blank 題目:https://www.lydsy.com/JudgeOnline/problem.php?id=1101 直接莫比烏斯反演。 代碼如下: #include<cstdio

BZOJ 1101 Luogu P3455 POI 2007 Zap (莫比烏斯反演+數論分塊)

手動部落格搬家: 本文發表於20171216 13:34:20, 原地址https://blog.csdn.net/suncongbo/article/details/78819470 URL: (Luogu)https://www.luogu.org/problem/show?pid=3455 (BZOJ

[BZOJ1101][POI2007]Zap

min 預處理 sum zoj () printf sqrt scrip scu 1101: [POI2007]Zap Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2732 Solved: 1164 [Submit]

[Luogu3455][POI2007]ZAP-Queries

ins uri logs have input common number already sin BZOJ(權限題) Luogu 題目描述 Byteasar the Cryptographer works on breaking the code of BSA (Byte

BZOJ1101: [POI2007]Zap(莫比烏斯反演)

tdi include AI prim ems 莫比烏斯 tput img gre 1101: [POI2007]Zap Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2951 Solved: 1293[Sub

bzoj 1098 [POI2007]辦公樓biu bfs+補圖+雙向鏈表

solved 必須 ++ ont 一行 ast color cst code [POI2007]辦公樓biu Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 1543 Solved: 743[Submit][Statu

bzoj 1100 [POI2007]對稱軸osi manacher

return 小朋友 min 他還 大腦 set truct 光明 com [POI2007]對稱軸osi Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 771 Solved: 307[Submit][Status]

[POI2007]Zap

cpp 正整數 區間 void inline pac ++ span tar Description FGD正在破解一段密碼,他需要回答很多類似的問題:對於給定的整數a,b和d,有多少正整數對x,y,滿足x<=a,y<=b,並且gcd(x,y)=d。作為FGD的

BZOJ 1103: [POI2007]大都市meg

etc 解釋 text 單點 %d .com 分享圖片 格式 現在 Description   在經濟全球化浪潮的影響下,習慣於漫步在清晨的鄉間小路的郵遞員Blue Mary也開始騎著摩托車傳遞郵件了。 不過,她經常回憶起以前在鄉間漫步的情景。昔日,鄉下有依次編號為

[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(

bzoj 1098 [POI2007] 辦公樓 biu

include stream esp 如何 img 復雜度 ans 圖片 之間 # 解題思路 畫畫圖可以發現,只要是兩個點之間沒有相互連邊,那麽就必須將這兩個人安排到同一個辦公樓內,如圖所示: 那,我們可以建立補圖,就是先建一張完全圖,然後把題目中給出的邊都刪掉,這

bzoj1101/洛谷P3455 [POI2007]ZAP-Queries

之前看了但是沒有理解的莫比烏斯函式現在找題目練練手。。。 寒假裡面看的當時理解不了就沒有多管,導致現在寫預處理函式很懵逼。。 題意:給定n,m,d,求出1<=x<=n,1<=y<=m中使得gcd(x,y)=d的x,y的對數 最簡單的方法,O(n²)的暴力列舉

bzoj 1098 [POI2007]辦公樓biu——連結串列

題目:https://www.lydsy.com/JudgeOnline/problem.php?id=1098 求補圖的連通塊大小。與自己沒有邊的和自己在一個連通塊裡。 用連結串列把所有點串起來。先給自己有邊的打上標記,刪掉自己,然後訪問連結串列裡的元素;沒有標記的就從連結串列裡刪掉並加入棧,對每個棧裡

P3455 [POI2007]ZAP-Queries(莫比烏斯反演)

分塊 min esp -s 公式 time names \n prime 思路 和YY的GCD類似但是更加簡單了 類似的推一波公式即可 \[ F(n)=\sum_{n|d}f(d) \] \[ f(n)=\sum_{n|d}\mu(\frac{d}{n})F(d) \] \

【刷題】BZOJ 1098 [POI2007]辦公樓biu

Description   FGD開辦了一家電話公司。他僱用了N個職員,給了每個職員一部手機。每個職員的手機裡都儲存有一些同事的 電話號碼。由於FGD的公司規模不斷擴大,舊的辦公樓已經顯得十分狹窄,FGD決定將公司遷至一些新的辦公樓。FG D希望職員被安置在儘量多的辦公樓當中,這樣對於每個職員來說都會有一個

bzoj1101: [POI2007]Zap(莫比烏斯反演)

原題連結 題目描述:FGD正在破解一段密碼,他需要回答很多類似的問題:對於給定的整數a,b和d,有多少正整數對x,y,滿足x<=a,y<=b,並且gcd(x,y)=d。作為FGD的同學,FGD希望得到你的幫助。 輸入格式:第一行包含一個正整數n,表示一共有n組詢問。(1<=n<=