Maruf_Hasan

uva 10139

Oct 16th, 2018
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.12 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<bits/stdc++.h>
  3. #include<algorithm>
  4. using namespace std;
  5.  
  6. #define M 1000000
  7. bool mark[M];
  8. vector<long long>prime;
  9. long long lst[100000];
  10. long long lstsize;
  11. long long lstsize1;
  12. long long lst1[100000];
  13.  
  14. void sieve()
  15. {
  16. long long i,j;
  17. prime.push_back(2);
  18. for(i=3;i*i<=M;i+=2)
  19. {
  20. if(mark[i]==false)
  21. {
  22. for(j=i*i;j<=M;j+=2*i)
  23. mark[j]=true;
  24. }
  25. }
  26. for(i=3;i<=M;i+=2)
  27. {
  28. if(mark[i]==false)
  29. prime.push_back(i);
  30. }
  31.  
  32. }
  33.  
  34. void primefac(long long n)
  35. {
  36. long long i,j;
  37. long long sqrtN=sqrt(n)+1;
  38. for(i=0;prime[i]<sqrtN;i++)
  39. {
  40. if(n%prime[i]==0)
  41. {
  42. while(n%prime[i]==0)
  43. {
  44. n/=prime[i];
  45. lst[lstsize++]=prime[i];
  46. }
  47. }
  48. }
  49. if(n>1){
  50. lst[lstsize++]=n;
  51. }
  52.  
  53. }
  54. void primefac1(long long m)
  55. {
  56. long long i,j;
  57. long long sqrtN=sqrt(m)+1;
  58. for(i=0;prime[i]<=sqrtN;i++)
  59. {
  60. if(m%prime[i]==0)
  61. {
  62. while(m%prime[i]==0)
  63. {
  64. m/=prime[i];
  65. lst1[lstsize1++]=prime[i];
  66. }
  67. }
  68.  
  69. }
  70. if(m>1){
  71. lst1[lstsize1++]=m;
  72. }
  73.  
  74. }
  75.  
  76.  
  77. int main()
  78. {
  79. sieve();
  80. long long n,i,fac=0,m;
  81. while(scanf("%lld %lld",&n,&m)==2)
  82. {
  83.  
  84. if(n>=m)
  85. {
  86. printf("%lld divides %lld!\n",m,n);
  87. }
  88. else{
  89. lstsize=0;
  90. lstsize1=0;
  91. for(i=n;i>0;i--)
  92. {
  93. primefac(i);
  94. }
  95.  
  96. primefac1(m);
  97. long long count=0;
  98.  
  99. long long k=0;
  100.  
  101.  
  102. sort(lst1,lst1+lstsize1);
  103. sort(lst,lst+lstsize);
  104.  
  105. for(i=0;i<lstsize1;i++)
  106. {
  107. for(int j=k;j<lstsize;j++)
  108. {
  109. if(lst1[i]==lst[j])
  110. {
  111. count++;
  112. k=j+1;
  113. break;
  114. }
  115. }
  116.  
  117. }
  118. if(count==lstsize1)
  119. {
  120. printf("%lld divides %lld!\n",m,n);
  121. }
  122. else
  123. printf("%lld does not divide %lld!\n",m,n);
  124. }
  125. }
  126. return 0;
  127.  
  128. }
Advertisement
Add Comment
Please, Sign In to add comment