Maruf_Hasan

factorization last time

Oct 23rd, 2018
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.39 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. vector<long long>lst;
  10. long long lstsize;
  11. long long lstsize1;
  12. vector<long long>lst1;
  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. for(i=0;prime[i]*prime[i]<=n;i++)
  38. {
  39. if(n%prime[i]==0)
  40. {
  41. while(n%prime[i]==0)
  42. {
  43. n/=prime[i];
  44. lst.push_back(prime[i]);
  45. lstsize++;
  46. }
  47. }
  48. }
  49. if(n>1){
  50. lst.push_back(n);
  51. lstsize++;
  52. }
  53.  
  54. }
  55. void primefac1(long long m)
  56. {
  57. long long i,j;
  58. for(i=0;prime[i]*prime[i]<=m;i++)
  59. {
  60. if(m%prime[i]==0)
  61. {
  62. while(m%prime[i]==0)
  63. {
  64. m/=prime[i];
  65. lst1.push_back(prime[i]);
  66. lstsize1++;
  67. }
  68. }
  69.  
  70. }
  71. if(m>1){
  72. lst1.push_back(m);
  73. lstsize1++;
  74. }
  75.  
  76. }
  77. bool issubset()
  78. {
  79. long long i=0,j=0;
  80. while(i<lstsize1 && j<lstsize)
  81. {
  82. if(lst[j]<lst1[i])
  83. {
  84. j++;
  85. }
  86. else if(lst[j]==lst1[i])
  87. {
  88. j++;
  89. i++;
  90. }
  91. else if(lst[j]>lst1[i])
  92. {
  93. return 0;
  94. }
  95. }
  96. return (i<lstsize1)?false:true;
  97. }
  98.  
  99.  
  100. int main()
  101. {
  102.  
  103. sieve();
  104. long long n,i,fac=0,m;
  105. while(scanf("%lld %lld",&n,&m)==2)
  106. {
  107.  
  108. if(n>=m)
  109. {
  110. printf("%lld divides %lld!\n",m,n);
  111. }
  112. else{
  113. lstsize=0;
  114. lstsize1=0;
  115. for(i=n;i>1;i--)
  116. {
  117. primefac(i);
  118. }
  119.  
  120. primefac1(m);
  121. long long count=0;
  122.  
  123. long long k=0;
  124.  
  125. i=0;
  126. long long j=0;
  127. sort(lst1.begin(),lst1.end());
  128. sort(lst.begin(),lst.end());
  129. bool ans;
  130. ans=issubset();
  131. if(ans==true)
  132. {
  133. printf("%lld divides %lld!\n",m,n);
  134. }
  135. else
  136. printf("%lld does not divide %lld!\n",m,n);
  137.  
  138. }
  139. lst.clear();
  140. lst1.clear();
  141. }
  142. return 0;
  143.  
  144. }
Advertisement
Add Comment
Please, Sign In to add comment