与えられた2つの正の整数GおよびLは、あなたは、(x、y、z)があり、そのGCD(X、Y、Z)= GおよびLCM(X、Y、Z)= Lを満たすどのように多くのソリューションを私に言うことができますか?
LCM(x、y、z)は、X、Y及びZの最小公倍数を意味しノートは、GCD(x、y、z)は、X、YおよびZの最大公約数を意味します。
(注2)、(1、2、3)、(1、3、2)は、2つの異なる溶液です。
LCM(x、y、z)は、X、Y及びZの最小公倍数を意味しノートは、GCD(x、y、z)は、X、YおよびZの最大公約数を意味します。
(注2)、(1、2、3)、(1、3、2)は、2つの異なる溶液です。
InputFirstラインは、テストケースの数を伝える、T(T <= 12)整数来ます。
次T線、それぞれが2つの正の32ビット符号付き整数、G及びL.を含ん
各回答は、32ビット符号付きinteger.OutputFor各テストケース、条件を満足する解の数と印刷一行に収まることを保証します入力above.Sample
2 6 72 7 33
サンプル出力
72 0
長い時間のように昨日は今朝考え出していなかった,,突然のインスピレーションが来ました。
溶液:最初に、我々は=よう* bとして、GCD(最大公約数との関係の最小公倍数ことを理解しなければならない B)* LCM(B)を同時に2つの側面がそうGCDのLCMの%のGCD == 0の二乗で割った場合!、LCMの%の最大公約数= 0の場合は、関係がないはず
秒:私たちは、新しいGCDで割っ同時に利用可能GCDとLCM GCDを聞かせLCM GCD = 1 LCM = LCM / GCD 彼らは、x / GCDのY / GCDですZ / GCDのGCDとLCMのLCM我々は分解することができる/ GCDとすることができる
第三:最大LCM ^ = P1(A1、A2、A3)* P2 ^ MAX(B1、B2、B3)...
X0 = P1 A1 .... ^
Y0 = P1 ^ B1 ...
Z0 = P1 ^ C1 ...
あなたは0ではありませんA1、B1、C1を言うなら、彼らは最大公約数1ではありませんので、彼らは、少なくとも3つを持っています連続的であるので(0~3生じないだけの数の素因数である必要があり、P1)は、2つの0の最大値は、0である
(0、A1、C1)以下A1まで追加しますC1 0の値-私たちは0に等しい検討A1および6(A1-1)種、並びに(0,0、A1)及び(0の合計に対する変化,, A1-1ために存在状況、A1、A1)我々はそのため6(A1-1)6種類の合計3 + 3種類の合計を考慮していません
書式#include <iostreamの> の#include <cstdioを> 使用して 名前空間はstdを、 CONSTの INT N = 1E6 + 7 。 ブール P [N] = { 1、1、0 }。 INT プライム[N]; int型のk = 0 。 ボイドプレ(){ K = 0 。 用(int型 iは= 2 ; iがNを<; Iは++ ){ 場合(P [I] == 0 ){ プライム[K ++] = I。 以下のための(int型I = Iは、Jを+; J <= N; = J + {I) P [I] = 1 ; } } } } INT (){主 プレ(); int型T; CIN >> T; 一方(T-- ) { int型N-、M; scanfの(" %のDの%のD "、およびN-、&M); IF(!%N-M = 0){ // 係数* bの最も一般的な倍数でなければならない共通の除数= GCD例GCDのLCMの正方形、GCDで除算しながら*両側= 0%がSO LCM プット(" 0 " ); 続行します。 } INT X = M / N。 int型の合計= 1 ; 以下のために(int型 i = 0 ; I <K &&プライム[I] <X、iは++ ){ 場合(Xの%プライム[I] == 0 ){ int型 ANS = 0 。 一方、(X%のプライム[I] == 0 ){ ANS ++ 。 X = X / プライム[I]。 } 和 * = 6 * ANS。 } } もし(X> 1)合計* = 6 。 coutの <<合計<< てendl; } 戻り 0 。 }