これは、数論+思考のタイトルバーに共通の問題です。
おそらくタイトルの意味は周りの多くの人がめまいです。
アイデア:
まず、X素因数の正常な動作が得られます。
その後、被験者が要求され、X各素因数P、G(I、P)乗法。i∈[1、N]。
我々はない各G(I、P)は、次の思考を変換どのPの最終的な力が、結果の各Pの寄与の逆電力です。
見かけ上、P ^発生回数をkは1〜N [N /(P ^ K)]です。
このように、すべての素因数を列挙して、答えることができる高速なコンピューティング・べき乗剰余演算を使用して
// の#pragmaコメント(リンカー、 "/ STACK:1024000000,1024000000") // の#pragma GCC最適化(2) の#include <ビット/ STDC ++ H> 使用して名前空間STDを、 typedefを倍増DOU。 typedefの長い長いLL。 typedefのペア < int型、int型 > PII。 マップのtypedef < int型、int型 > MII; #define PAI ACOS(-1.0) の#define M 200007 の#define INF 0x3f3f3f3f の#define MOD十億七 の#defineインラインIN の#define W(a)は(A) の#define lowbit(a)のA&( - A) の#define左のk << 1つ の#define右のk << 1 | 1 の#define LSONのL、ミッド、左 の#define rsonミッド+ 1、 R、右 の#define MS(B)のmemset(A、B、はsizeof(A)) の#define ABS(A)(^(>> 31)) - (>> 31) #defineするランダム(A 、B)(RAND()%(B + 1-A)+ A) の#define false_stdio IOS :: sync_with_stdio(偽)、cin.tie(0)、cout.tie(0) LL X、N。 LL ANS = 1 。 ベクトル <LL> NUM; 無効{(TMP LL)INITの ための(LL I = 2 ; iは<= TMPを*; I ++){ 場合(TMPは、%I == 0 ){ num.push_back(I)。 W(TMPの%I == 0)TMP / = I。 } } もし(!TMP = 1 )num.push_back(TMP)。 } LL捕虜(LL 塩基、SUP LL){ LL和 = 1 。 W(SUP){ 場合(SUP&1)合計=(SUM * ベース)%MOD。 SUP >> = 1 ; 基地 =(ベース * ベース)%MOD; } 戻り SUMの%のMOD; } int型のmain(){ false_stdio; CIN >> X N-、 INIT(X) のための(オートP:NUM){ LL TMP = 1 ; Wは(TMP <= N / P ){ // 条件がTMPの* pとして理解されるべきである<= nであり、n%のP == 0、それは精密分割用いてブラストすることを防止することができる TMPを* = P; ANS =(ANS *パウ(P、N- / TMP))%MOD; } } COUT << ANS << ENDL; 戻り 0 ; }