#include #include using namespace std; using namespace atcoder; typedef long long int ll; typedef long double ld; #define FOR(i,l,r) for(ll i=l;i=l;i--) #define RREP(i,n) RFOR(i,0,n) #define ALL(x) x.begin(),x.end() #define PA pair #define F first #define S second #define BS(A,x) binary_search(ALL(A),x) #define LB(A,x) (ll)(lower_bound(ALL(A),x)-A.begin()) #define UB(A,x) (ll)(upper_bound(ALL(A),x)-A.begin()) #define COU(A,x) (UB(A,x)-LB(A,x)) #define sz(c) ((ll)(c).size()) //#include //namespace mp=boost::multiprecision; //using Bint=mp::cpp_int; templateusing min_priority_queue=priority_queue,greater>; templateostream&operator<<(ostream&os,pair&p){os<istream&operator>>(istream&is,pair&p){is>>p.F>>p.S;return is;} templateostream&operator<<(ostream&os,vector&v){REP(i,sz(v))os<istream&operator>>(istream&is,vector&v){for(T&in:v)is>>in;return is;} templatebool chmax(T&a,T b){if(abool chmin(T&a,T b){if(b>A>>B>>N; vectorDP(B+1); FOR(i,1,B+1)DP[i]=Mypow(B/i-(A-1)/i,N,mod-1); vectorF(B+1,1);F[0]=F[1]=0; FOR(i,1,B+1)if(F[i])FOR(j,2,B/i+1)F[i*j]=0; vectorT(B+1);T[0]=T[1]=-1e18; FOR(i,2,B+1)if(F[i]){ FOR(j,1,B/i+1){ if(j%i)T[i*j]++; else T[i*j]=-1e18; } } vectorP;FOR(i,2,B+1)if(T[i]>0)P.emplace_back(PA(i,T[i])); mint ans=1; RFOR(i,1,B+1){ ll k=DP[i]; for(auto[j,c]:P){ if(i*j>B)break; if(c%2)k-=DP[i*j]; else k+=DP[i*j]; k%=mod-1; } if(k<0)k+=mod-1; ans*=Mypow(i,k,mod); } cout<