Advertisement
SMASIF

Sieve Nod (Prime factors using sieve)

Aug 23rd, 2017
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.96 KB | None | 0 0
  1. #include<iostream>
  2. #include<cmath>
  3. using namespace std;
  4.  
  5. int arr[100],primesize,prime[1000000];
  6.  
  7. void sieve_prime(int num)
  8. {
  9.  
  10. int j=2;
  11. for(int i=3; i<sqrt(num); i+=2)
  12. {
  13. if(arr[i]==0)
  14. {
  15. for(int j=i; j*i<num; j++)
  16. {
  17. arr[i*j]=1;
  18. }
  19. }
  20. }
  21.  
  22. prime[1]=2;
  23.  
  24. for(int i=2; i<num; i++)
  25. {
  26. if(arr[i]==0 && i%2!=0)
  27. {
  28.  
  29. prime[j]=i;
  30. j++;
  31. primesize++;
  32. }
  33. }
  34. }
  35.  
  36. int NOD(int n)
  37. {
  38. int mul=1;
  39. for(int i=1; i<primesize && prime[i]*prime[i]; i++)
  40. {
  41. int cont=0;
  42. while(n%prime[i]==0)
  43. {
  44. cont++;
  45. n/=prime[i];
  46. }
  47. mul=mul*(cont+1);
  48. }
  49. return mul;
  50. }
  51.  
  52. int main()
  53. {
  54. int num,x;
  55.  
  56. while(cin>>num)
  57. {
  58. sieve_prime(num);
  59. x=NOD(num);
  60.  
  61. cout<<x<<endl;
  62.  
  63. }
  64.  
  65. return 0;
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement