Advertisement
a53

nrdivprod

a53
Jan 23rd, 2022
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.29 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. ifstream in("nrdivprod.in");
  5. ofstream out("nrdivprod.out");
  6.  
  7. vector<int> prime(1000001),v(80000),w={2};
  8.  
  9. int cautare(int x)
  10. {
  11. int st=0,dr=w.size()-1,mij;
  12. while(st<=dr)
  13. {
  14. mij=(st+dr)/2;
  15. if(w[mij]==x)
  16. return mij;
  17. else
  18. if(w[mij]>x)
  19. dr=mij-1;
  20. else
  21. st=mij+1;
  22. }
  23. return 0;
  24. }
  25.  
  26. void init()
  27. {
  28. int i;
  29. prime[0]=prime[1]=1;
  30. for(i=3;i*i<=1000000;i+=2)
  31. if(prime[i]==0)
  32. {
  33. w.push_back(i);
  34. for(int j=i*i;j<=1000000;j+=2*i)
  35. prime[j]=1;
  36. }
  37. for(;i<=1000000;i+=2)
  38. if(prime[i]==0)
  39. w.push_back(i);
  40. }
  41.  
  42. void fact(int x)
  43. {
  44. int ap=0,ok=0;
  45. for(int i=0;i<w.size() && i*i<=x;i++)
  46. {
  47. ap=0;
  48. while(x%w[i]==0)
  49. x/=w[i],ap++;
  50. if(ap)
  51. v[i]+=ap;
  52. }
  53. if(x>1)
  54. v[cautare(x)]++;
  55. }
  56.  
  57. int main()
  58. {
  59. init();
  60. unsigned long long n,x,p=1;
  61. in>>n;
  62. for(int i=1;i<=n;i++)
  63. {
  64. in>>x;
  65. if(!prime[x] && (x%2 && x!=2))
  66. v[cautare(x)]++;
  67. else
  68. fact(x);
  69. }
  70. for(int i=0;i<v.size();i++)
  71. p*=(v[i]+1),p%=1000000007;
  72. out<<p;
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement