再タイトル+に[HDU-1695] GCD反転テンプレート

説明

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反転、ラインを書いた⑧!

おすすめ

転載: www.cnblogs.com/tudouuuuu/p/11600308.html