【問題描述】
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 認為自己已經熟練地掌握了這些知識,他開始思考...