Maruf_Hasan

prime factorization

Oct 17th, 2018
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.57 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<bits/stdc++.h>
  3. #include<algorithm>
  4. using namespace std;
  5.  
  6. #define M 10000000
  7. bool mark[M];
  8. vector<int>prime;
  9. int lst[1000];
  10. int lstsize;
  11. int lstsize1;
  12. int lst1[1000];
  13.  
  14. void sieve()
  15. {
  16. int 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(int n)
  35. {
  36. int i,j;
  37. int 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(int m)
  55. {
  56. int i,j;
  57. int 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. int primefauck(int m)
  77. {
  78. int listsize3=0;
  79. int sqrtN=sqrt(m)+1,max=0;
  80. for(int i=0;prime[i]<=sqrtN;i++)
  81. {
  82. if(m%prime[i]==0)
  83. {
  84. while(m%prime[i]==0){
  85. m/=prime[i];
  86. }
  87. if(prime[i]>max)max=prime[i];
  88. }
  89. }
  90. if(m>max)
  91. { max=m;}
  92. return max;
  93. }
  94.  
  95.  
  96.  
  97.  
  98.  
  99. int main()
  100. {
  101. sieve();
  102. int n,i,fac=0,m;
  103. while(scanf("%d %d",&n,&m)==2)
  104. {
  105. int k=primefauck(m);
  106. if(n==0)
  107. {
  108. printf("%d divides %d!\n",m,n);
  109. }
  110. else if(n>=m)
  111. {
  112. printf("%d divides %d!\n",m,n);
  113. }
  114.  
  115. else if(k>n )
  116. {
  117. printf("%d does not divide %d!\n",m,n);
  118.  
  119. }
  120. else{
  121. lstsize=0;
  122. lstsize1=0;
  123. for(i=n;i>0;i--)
  124. {1
  125. primefac(i);
  126. }
  127.  
  128. primefac1(m);
  129. int count=0;
  130.  
  131. int k=0;
  132.  
  133.  
  134. sort(lst1,lst1+lstsize1);
  135. sort(lst,lst+lstsize);
  136.  
  137. for(i=0;i<lstsize1;i++)
  138. {
  139. for(int j=k;j<lstsize;j++)
  140. {
  141. if(lst1[i]==lst[j])
  142. {
  143. count++;
  144. k=j+1;
  145. break;
  146. }
  147. }
  148.  
  149. }
  150. if(count==lstsize1)
  151. {
  152. printf("%d divides %d!\n",m,n);
  153. }
  154. else
  155. printf("%d does not divide %d!\n",m,n);
  156. }
  157. }
  158. return 0;
  159.  
  160. }
Advertisement
Add Comment
Please, Sign In to add comment