Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- typedef long long int ll;
- #define mxn 200005
- bool mark[mxn+5];
- ll isprime[mxn+5],psize;
- ll arr[mxn+5],flag=0;
- void sieve()
- {
- mark[0]=true;
- mark[1]=true;
- for(int i=2; i*i<=mxn; i++)
- {
- if(mark[i]==false)
- {
- for(int j=i*i; j<=mxn; j+=i)
- mark[j]=true;
- }
- }
- psize=0;
- for(int i=2; i<=mxn; i++)
- {
- if(mark[i]==false)
- isprime[psize++]=i;
- }
- }
- ll fun(ll prime,ll n)
- {
- ll cnt=0;
- while(n>=prime)
- {
- cnt+=(n/prime);
- n/=prime;
- }
- return cnt;
- }
- void prime_factor(ll d)
- {
- for(int i=0;isprime[i]<=100;i++)
- {
- while(d%isprime[i]==0)
- {
- d/=isprime[i];
- arr[isprime[i]]--;
- }
- }
- if(d!=1)
- flag=1;
- }
- int main()
- {
- sieve();
- ll n,d,i,j,k,a,b,c,e;
- while(cin>>n>>d)
- {
- flag=0;
- if(n==0 && d==0)
- break;
- d=abs(d);
- if(n==0)
- {
- if(d==1)
- cout<<1<<endl;
- else
- cout<<0<<endl;
- continue;
- }
- memset(arr,0,sizeof(arr));
- for(i=0; isprime[i]<=n; i++)
- {
- arr[isprime[i]]=fun(isprime[i],n);
- }
- prime_factor(d);
- ll ans=1;
- for(i=0;isprime[i]<=100;i++)
- {
- if(arr[isprime[i]]<0)
- {
- ans=0;
- break;
- }
- else if(arr[isprime[i]]>0)
- {
- ans*=(arr[isprime[i]]+1);
- }
- }
- if(flag)
- ans=0;
- cout<<ans<<endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement