少し数学


少数の最近のトピックを勉強し始めたが、この時間は、彼は容易に式を書き出し、

 

しかし、彼は、彼はこの式を計算することがありそうでなかったことがわかった、あなたは彼に結果を伝えることができ、答えは比較的大きいかもしれない、十億七に死んでください。

説明を入力します。

ライン2つの正の整数N、M行2つの正の整数N、M 行の2 番目の正の整数番号N- M

出力説明:

ライン出力ラインAは、整数出力の整数を表し、整数番号テーブルが示す出力接合結果を
例1

エントリー

コピー
2 2

輸出

コピー
7

1≦nは、m≤1e61\ n型のLeq、m個の\のLeq 1E6 1つの。N- タイトルの意味:二つの数字を考えると、N、M; (1〜n)を求めて(1〜 m)の最大公約数の(i、j)は広場と


アイデア:シンプルな暴力確かにタイムアウト、
我々は規則の最大の可能な数は徐々に分(N、M)から減少し始める求める回し、2つの数の最大公約数を参照してください
分(N、M)から〜1
ので、P =分(n、m)は、
その後、N N / P、すなわち除数Pの存在N / p個の複数したP
同じ目的のためにMを、
再度、P * 2からのPのすべての倍数を開始した後次いで、最大数がpの数は、約残りは、失われた、すなわち、nについて、M個の用語そのGCD(N、M)== Pの全ての組み合わせ(N / P)*(M / P)。


。N- = 9、M = 7;
P = 7;
GCD(I、J)== 7;
F [7] = 1;
GCD(I、J)= 6;
F [6] = 1;
GCD(I、 J)= 5;
[5] F = 5;
GCD(I、J)= 4;
F = 2 [4]。
GCD(I、J)= 3。
F [3] = 5。
GCD(I、J)= 2。
F [2] = 9。
F [1] = 44。

1つの#include <ビット/ STDC ++ H>
 2  
3  使用して 名前空間STDを、
4のtypedef 長い LL。
5  のconst  int型 N = 1E6 + 10 6  の#define MOD十億七
 7  のLL N、M。
8  のLL NUM;
9  のLL F [N]。
10  のint main()の
 11  {
 12      のscanf(" %のLLDの%のLLD "、&​​N、&M)。
13      のためには、int型 I =分(N、M); I> = 1 ; i-- 14      {
 15          F [I] =(N / I)*(M / I)。
16          のためにINT J = 2 * I; J <=分(N、M); J + = I)
 17          {
 18              F [1] - = F [J]。
19          }
 20          // COUT << [I] <<」「<< I << ENDL F。
21          NUM =(NUM + F [I] * I MOD%* I%MOD)%MOD。
22      }
 23      COUT << NUM << ENDL。
24      リターン 0 ;
25 }
コードの表示

 

 
 
 

 

おすすめ

転載: www.cnblogs.com/wangzhe52xia/p/11404406.html