Sumdiv数論に言及(数学は非常に重要である)、この質問はアルゴリズムで二倍になり、数学が最も重要であり、古典的な式(需要要因)(良い導出)のいずれかに注意を払います...

問題の説明
2つの自然数Aを考えるとBはSがA ^ Bのすべての自然約数の合計とします。Sモジュロ9901(9901によるSの分割の残りの部分)を決定します。
 

 

入力
唯一のラインは、空白で区切られた2つの自然数A及びBを、(0 <= A、B <= 50000000)を含みます。
 

 

出力
出力の唯一のラインはSモジュロ9901が含まれています。
 

 

サンプル入力
2 3
 

 

サンプル出力
15
************************************************** ************************************************** ***********************
S =(1 + P 1 + P 1 ^ 2 + P 1 ^ 3 + ... P1 ^ K1)*(1つの+ P2 + P2 ^ 2 + P 2 ^ 3 + ... .p2 ^ K2)*(1 + P3 + P3 ^ 3 + ... + P3 ^ K3)* ... *(1 + PN + PN ^ 2 + PN ^ 3 + ... PN ^ KN); Sは、除数の数、良好なプッシュこの式を表し、わずかに(数学的記述は非常に重要なああです!!)(pは素数であり、これは因数分解の要因であることに注意してください、あなたが復元しようとすることができます)、それを理解すると思います
************************************************** ************************************************** ***********************
1の#include <iostreamの>
 2の#include <cstdioを>
 3の#include <math.h>の
 4  
5  の#define SIZE_N 10000
 6  の#define MODE 9901
 7  使って 名前空間STD。
8  のtypedef __int64 LLG。
9  
10  INT プライム[SIZE_N]、CNT [SIZE_N]。
11  
12  
13  INT My_power(LLGのN、int型 M)// 求一个Q ^ N的幂值
14  {
 15      LLGのANSの= 1 ;
16      一方、(M){
 17          であれば(M&1 ){
 18は              ANS =()%* N-ANS MODE;
 19          }
 20          N-N(= N - *)%MODE;
 21であり          、M >> = 1 ;
 22である     }
 23はある     リターン((ANSの== 0)?MODE:ANS) ;
 24  }
 25  
26である LLG Sum_gp(P LLG、N-LLG)// の電力値の合計
27  {
 28      IF(N - == 0リターン 1。;
 29      IF(&N- 1 30          リターン((1 + My_power(P、N / 2 + 1))* Sum_gp(P、N / 2))%のMODE。
31      
32          リターン((1 + My_power(P、N / 2 + 1))* Sum_gp(P、N / 2 - 1)+ My_power(P、N / 2))%のMODE。
33  }
 34  
35  
36  
37  INT Sumdiv(INT A、INT B)
 38  {
 39      INT I、Jは、XZ。
40      INT ANS = 1 41 
42の      XZ =のSQRT(A)。
43      のための(I = 2、J = 0 ; iはXZを<; iは++ ){
 44          であれば(%I == 0 ){
 45              プライム[J] = I。
46              一方(%iは== 0 ){
 47                  CNT [J] ++ ;
48                  / = I。
49              }
 50              J ++ ;
51          }
 52      }
 53      であれば(!= 1 ){
 54         プライム[j]は= ;
55          CNT [J ++] = 1 56      }
 57      (i = 0 ; iが<J; iは++ ){
 58件          のANS =(ANS * Sum_gp(プライム[i]は、CNT [I] * B))%のMODE。
59      }
 60の     リターンANS。
61  }
 62  
63  のint main()の
 64  {
 65      int型A、B。
66の     int型のANS;
67  
68      一方(のscanf(" %d個の%のD "、&​​、&B)!= EOF){
 69         ANS = Sumdiv(B)
70          のprintf(" %d個の\ n " 、ANS)。
71      }
 72      リターン 0 73 }
コードの表示

 

ます。https://www.cnblogs.com/sdau--codeants/p/3383124.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_34221073/article/details/93432846