/* https://yukicoder.me/problems/4962 */ #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; const ll INF=1LL<<60; typedef pair P; typedef pair PP; const ll MOD=1e9+7; ll mod_pow(ll x,ll y,ll mod){ ll res=1; while(y>0){ if(y&1){ res*=x; res%=mod; } x*=x; x%=mod; y/=2; } return res; } int main(){ ll A,B,N; cin>>A>>B>>N; ll ans=1; vector num(B+1,0); for(ll g=B;g>=1;g--){ //gcd(i1,i2,i3,..,iN)=gを考える ll c=max(0LL,B/g - (A-1)/g); num[g]=mod_pow(c,N,MOD);// A~Bの中でgの倍数の個数 for(ll t=2*g;t<=B;t+=g){ num[g]-=num[t]; num[g]+=MOD; num[g]%=MOD; } ans*=mod_pow(g,max(0LL,num[g]),MOD);//%MOD; ans%=MOD; } /* for(int g=A;g<=B;g++){ cout<<"g="<