問題の説明
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で再現