それは右の統計的方法を変更しなければならなかった、包含と除外の実践を考えるようになったが、WAてきました。
<ビット/ STDC ++ H>の#include の#define MOD十億七 の#define LL符号なし長い長 の#define setIO(S)freopenは(S ".IN"、 "R"、STDIN) 使用して名前空間std。 ベクトル<LL> V。 qpow LL(LLベース、LLのK) { LL TMP = 1LL。 (K >> = 1、基地=ベース*基地%MOD; K)(K&1)TMP = TMP *基地%のMODならため、 TMPを返します。 } int型のmain() { int型I、J。 LL X、N、P。 // setIO( "入力"); scanf関数( "%のLLDの%のLLD"、&X、&N)。 P = xで。 以下のための(I = 2; iは、* I <= P; ++ I) { IF(P%のI == 0) { v.push_back(I)。 } もし(P> 1)v.push_back(P)。 LL ANS = 1LL。 用(i = 0; iはv.sizeを()<; ++ i)が { LL M = N。 今= 0っ。 一方、(M> = V [i])と { 今+ = M / V [i]は、 M / V = [I]; } ANS = ANS * qpow(V [i]は、今)%MOD。 } のprintf( "%LLDする\ n"、(長い長い)ANS)。 0を返します。 }