Hankson的趣味題

2021-08-06 04:30:12 字數 2710 閱讀 7427

【問題描述】

hanks博士是bt(bio-tech,生物技術)領域的知名專家,他的兒子名叫hankson。現在,剛剛放學回家的hankson正在思考乙個有趣的問題。

今天在課堂上,老師講解了如何求兩個正整數c1和c2的最大公約數和最小公倍數。現在hankson認為自己已經熟練地掌握了這些知識,他開始思考乙個「求公約數」和「求公倍數」之類問題的「逆問題」,這個問題是這樣的:已知正整數a0,a1,b0,b1,設某未知正整數x滿足:

1、 x和a0的最大公約數是a1;

2、 x和b0的最小公倍數是b1。

hankson的「逆問題」就是求出滿足條件的正整數x。但稍加思索之後,他發現這樣的x並不唯一,甚至可能不存在。因此他轉而開始考慮如何求解滿足條件的x的個數。請你幫助他程式設計求解這個問題。

【輸入】

輸入檔名為son.in。第一行為乙個正整數n,表示有n組輸入資料。接下來的n行每行一組輸入資料,為四個正整數a0,a1,b0,b1,每兩個整數之間用乙個空格隔開。輸入資料保證a0能被a1整除,b1能被b0整除。

【輸出】

輸出檔案son.out共n行。每組輸入資料的輸出結果佔一行,為乙個整數。

對於每組資料:若不存在這樣的x,請輸出0;

若存在這樣的x,請輸出滿足條件的x的個數;

【輸出輸出樣例】

son.in

2 41 1 96 288

95 1 37 1776

son.out 6 2

【說明】

第一組輸入資料,x可以是9、18、36、72、144、288,共有6個。

第二組輸入資料,x可以是48、1776,共有2個。

【資料範圍】

對於50%的資料,保證有1≤a0,b1,b0,b1≤10000且n≤100。

對於100%的資料,保證有1≤a0,b1,b0,b1≤2,000,000,000且n≤2000。

分析:

根據最小公倍數和最大公約數分解質因數指數的特殊關係進行優化

比如兩個數,分解質因數可以得到以下的式子

a=p1^a1+p2^a2+p3^a3……

b=p1^b1+p2^b2+p3^a3……

例如6和21就可以分解成

6=2^1+3^1+5^0+7^0……

21=2^0+3^1+5^0+7^1……

最大公約數=2^(min(a1,b1))+3^(min(a2,b2))+5^(min(a3,b3))+7^(min(a4,b4))…

最小公倍數=2^(max(a1,b1))+3^(max(a2,b2))+5^(max(a3,b3))+7^(max(a4,b4))…

我們可以先預處理50000以內的質數,

然後每讀入一組資料,初始答案ans=1,

然後我們迴圈質數,看a0、a1、b0、b1裡面有多少個該質數因子,

我們設求出來的該因子個數分別是t1、t2、t3、t4

如果資料合法,那麼t1>=t2,t3<=t4

根據最大公約數和最小公倍數的定義,

我們要求的數所擁有的該質因子個數s必須要同時滿足以下限制條件:

若t1>t2,則s=t2

若t1=t2,則s>=t2 //t2是t1和s取min的結果

若t3 < t4,則s=t4

若t3=t4,則s<=t4 //t4是t3和s取max的結果

若t1 < t2||t3>t4—->無解

讓我們來看一下判斷:

if (t1>t2) f1=1;

mn=t2;

if (t31;

mx=t4;

if (!(f1||f2)) ans=ans*(mx-mn+1);

else

if (f1==0&&f2==0&&mx!=mn)

如果t1>t2 說明s只能等於t2,f1=1

如果t3 < t4 說明s只能等於t3,f2=1

如果規定只能等於乙個值,而(f1=1,f2=1),且mn!=mx,ans=0

只要有乙個規定值了,ans*=1

luogu上第二個點過不去。。。

這裡寫**片

#include

#include

#include

#include

#define ll long long

using namespace std;

const int n=500000;

const int inf=0x33333333;

ll sshu[50010],tot=0;

bool no[500010];

ll a0,a1,b0,b1;

int t1,t2,t3,t4,n;

void cl()

}}void doit()

if (t1>t2) f1=1;

mn=t2;

if (t31;

mx=t4;

if (!(f1||f2)) ans=ans*(mx-mn+1);

else

if (f1&&f2&&mx!=mn)

}printf("%lld\n",ans);

}int main()

return

0;}

MySQL趣味題 Hankson的趣味題

思路 由於x是b1的約數,所以x的質因子一定也是b1的質因子,我們可以對b1的每個質因子p,分別計算a0,a1,b0,b1分別 包含多少個p.然後討論x可能含有幾個p即可 include include include include include include using namespace ...

Hankson的趣味題(藍橋杯)

時間限制 1 sec 記憶體限制 128 mb 提交 命題人 外部匯入 題目描述hanks 博士是bt bio tech,生物技術 領域的知名專家,他的兒子名叫hankson。現 在,剛剛放學回家的hankson 正在思考乙個有趣的問題。今天在課堂上,老師講解了如何求兩個正整數c1 和c2 的最大公...

NOIP09 Hankson的趣味題

hanks 博士是bt bio tech,生物技術 領域的知名專家,他的兒子名叫hankson。現在,剛剛放學回家的hankson 正在思考乙個有趣的問題。今天在課堂上,老師講解了如何求兩個正整數c1 和c2 的最大公約數和最小公倍數。現在hankson 認為自己已經熟練地掌握了這些知識,他開始思考...