説明
5つの整数を考える:A、B、C、D、Kを、あなたは... Bでのx、CのY ... D GCD(X、Y)= Kを見つけることです。GCD(x、y)はxとyの最大公約数を意味します。選択肢の数が非常に大きくなることがありますので、あなただけの出力に異なる数のペアの合計数を必要としています。
それを注意してください、(X = 5、Y = 7)及び(X = 7、Y = 5)と同じであると考えられます。
Yoiuは、すべてのテストケースでは、そのA = C = 1を仮定することができます。入力
入力はいくつかのテストケースで構成されています。入力の最初の行はケースの数です。3,000人以上のケースが全くありません。
上記のように<= K <= 100,000、B、C、D、K、0 <a <= bの<= 100,000 0 <C <= D <= 100,000 0:それぞれの場合は、5つの整数を含みます。
出力
各テストケースのために、選択肢の数を印刷します。例形式を使用します。
サンプル入力
2 1 3 1 5 1 1 1 11014 14409 9
サンプル出力
ケース1:9 ケース2:736427
ヒント
最初のサンプルの入力のために、数字の全て9ペアは、(1,1)、(1,2)、(1,3)、(1,4)、(1,5)、(2,3)、( 2,5)、(3,4)、(3,5)。
質問のホット足の中国の意味
$ \当量X \当量B、C \当量Y \当量のD $、および$ X $は、$のYの$に等しくなる$のGCD(i、j)を満たす= $どのくらいの$ Xの$、$ Yのk個よい満たすために探しています$。
考え
質問の本来の意味は、$ A = = 1 $と$ C = = 1 $満たされています。
テンプレートは、$ \ sum_ {i = 1} ^ {N} \ sum_ {J = 1} ^ {M} [GCD(I、J)= K] $を見つけるために手にすることができます。
$ bの\の当量のD $を作る可能性があります。
最初の$ \ sum_ {シークのI = 1} ^ {B} \ sum_ {J = 1} ^ {D} [GCD(I、J)= K] $、マイナス$ \ sum_ {i = 1} ^ { B} \ sum_ {J = 1} ^ {B} [GCD(I、J)= K] $重複排除。
ACコード
1つの#include <ビット/ STDC ++ H> 2 の#defineは長い長いっ 3が 使用 名前空間STDを、 4 のconst int型 SIZE = 1E6 + 10 。 5 ブール確認[SIZE]。 6 INT プライム[SIZE]。 7 int型ミュー[SIZE]。 8 ボイドMoblus(){ 9 のmemset(チェック、偽、はsizeof (チェック))。 10 マイクロ1 ] = 1 。 11 INT TOT = 0 。 12 のために(int型、I = 2 ; iは= SIZE <; iは++ ){ 13 であれば(!チェック[I]){ 14 プライム[TOT ++] = I。 15 マイクロ[I] = - 1 。 16 } 17 のために(INT J = 0 ; J <TOT; J ++ ){ 18 ならば(私はプライム[J] *> {SIZE) 19 ブレーク。 20 } 21 チェック[i *が素数[J] = 真。 22 であれば(私の%プライム[j] == 0 ){ 23 ムー= [iのj]の[プライム*] 0 ; 24 ブレーク; 25 } 26 他{ 27 = MU [iがj]は[プライム*] - ミュー[I]。 28 } 29 } 30 } 31 } 32 33 LL和(INTのx、int型の Y、int型K){ 34 のLLのRES = 0 。 35 INTミネソタ州=分(床(X / K)、床(Y / K))。 36 のために(INT D = 1; D <=ミネソタ州; D ++ ){ 37の RES + =(LL)MU [D] *(LL)床(X /(D * K))*(LL)床(Y /(D * K))。 38 } 39の リターンRES。 40 } 41 42 INT メイン(){ 43 Moblus()。 44 のint T; scanf関数(" %のD "、&T)。 45 INTカセ= 1 。 46 一方(t-- ){ 47 int型 A、B、C、D、E; scanf関数(" %D%D%D%D%D "、&、&B、&C、&D、およびE)。 48 もし(!e)の{// 0が決定されることに注意してください、エラーの前にいくつかの髪...... 49 のprintf(" ケース%のD:N- 0 \ "、加瀬++); 続行; 50 } 51は IF(B> D)スワップ(B、D); // ません交換するWA 52である LL ANS1 = SUM(B、D、E); 53である LL ANS2 = SUM(Bは、B、E) 54である のprintf(" ケース%Dは:%LLD \ N- "、加瀬++、ANS1-ANS2 / 2 ); 55 } 56 }
物語
shk001:今日の数論、そして私の時計で、あなたを、私を迫害します。
tudouuuuu:まだ終わっていないチェーン分割のREA1数。
shk001:ライン⑧、私はこれらの日は鍋に満ちていると感じどのように理論、数学、計算幾何学、DP、ポットを検索し、戻ってカウント。
(*普マウンテンプレイにTudouuuuu)
tudouuuuu:私は賭けを失った、私は10反転、ラインを書いた⑧!