Advertisement
Farjana_akter

Untitled

Jun 6th, 2020
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.74 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long int ll;
  4. #define mxn 200005
  5. bool mark[mxn+5];
  6. ll isprime[mxn+5],psize;
  7. ll arr[mxn+5],flag=0;
  8. void sieve()
  9. {
  10. mark[0]=true;
  11. mark[1]=true;
  12. for(int i=2; i*i<=mxn; i++)
  13. {
  14. if(mark[i]==false)
  15. {
  16. for(int j=i*i; j<=mxn; j+=i)
  17. mark[j]=true;
  18. }
  19. }
  20. psize=0;
  21. for(int i=2; i<=mxn; i++)
  22. {
  23. if(mark[i]==false)
  24. isprime[psize++]=i;
  25. }
  26. }
  27.  
  28. ll fun(ll prime,ll n)
  29. {
  30. ll cnt=0;
  31. while(n>=prime)
  32. {
  33. cnt+=(n/prime);
  34. n/=prime;
  35. }
  36. return cnt;
  37. }
  38.  
  39. void prime_factor(ll d)
  40. {
  41. for(int i=0;isprime[i]<=100;i++)
  42. {
  43. while(d%isprime[i]==0)
  44. {
  45. d/=isprime[i];
  46. arr[isprime[i]]--;
  47. }
  48. }
  49. if(d!=1)
  50. flag=1;
  51. }
  52.  
  53. int main()
  54. {
  55. sieve();
  56. ll n,d,i,j,k,a,b,c,e;
  57. while(cin>>n>>d)
  58. {
  59. flag=0;
  60. if(n==0 && d==0)
  61. break;
  62. d=abs(d);
  63. if(n==0)
  64. {
  65. if(d==1)
  66. cout<<1<<endl;
  67. else
  68. cout<<0<<endl;
  69. continue;
  70. }
  71. memset(arr,0,sizeof(arr));
  72. for(i=0; isprime[i]<=n; i++)
  73. {
  74. arr[isprime[i]]=fun(isprime[i],n);
  75. }
  76. prime_factor(d);
  77. ll ans=1;
  78. for(i=0;isprime[i]<=100;i++)
  79. {
  80. if(arr[isprime[i]]<0)
  81. {
  82. ans=0;
  83. break;
  84. }
  85. else if(arr[isprime[i]]>0)
  86. {
  87. ans*=(arr[isprime[i]]+1);
  88. }
  89. }
  90. if(flag)
  91. ans=0;
  92. cout<<ans<<endl;
  93. }
  94. return 0;
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement