#include using namespace std; #define ALL(x) x.begin(),x.end() #define rep(i,n) for(int i=0;i<(n);i++) #define debug(v) cout<<#v<<":";for(auto x:v){cout<bool chmax(T &a,const T &b){if(abool chmin(T &a,const T &b){if(bn-r) r=n-r; if(r==0) return 1; ll a=1; //a=n!/(n-r)!=n~n-r+1までの総積->O(r) for(ll i=0;i>n>>k; if(n==k){ cout<<1< v; for(ll i=2;i*i<=n;i++)if(n%i==0){ ll x=i; if(k%x==0) v.push_back(x); if(x*x!=n){ x=n/i; if(k%x==0) v.push_back(x); } } sort(ALL(v)); map mp; for(auto x:v)mp[x]=0; rep(i,v.size()){ //v[i]分割する ll box=n/v[i],ball=k/v[i]; mp[box]=(mp[box]+COM(box,ball))%mod; for(ll j=box*2;j<=n;j+=box){ if(mp.count(j)){ mp[j]=(mp[j]+mod-mp[box])%mod; } } } ll ans=0; for(auto p:mp)ans=(ans+p.second)%mod; cout<