G - GCDとLCM電気ハング

与えられた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つの異なる溶液です。

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] = { 110 }。
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 
}

 



おすすめ

転載: www.cnblogs.com/Accepting/p/11343652.html