Advertisement
a53

Divizori4

a53
Feb 23rd, 2019
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.15 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define MAX_N 1000005
  3. using namespace std;
  4. int n,c,p,v[50005],nrp,P[MAX_N];
  5. int nrdivp,nrd,K;
  6. bitset <MAX_N> viz;
  7.  
  8. void ciur()
  9. {
  10. for(int i=2;i<MAX_N;++i)
  11. {
  12. if(viz[i]==0)
  13. {
  14. P[++K]=i;
  15. for(int j=i+i;j<MAX_N;j+=i)
  16. viz[j]=1;
  17. }
  18. }
  19. }
  20.  
  21. int numardiv(int nr)
  22. {
  23. int pr=1;
  24. int j,al=0;
  25. while(nr%2==0)
  26. nr/=2,++al;
  27. pr*=(al+1);
  28. for(j=1;j<=K&&1LL*P[j]*P[j]<=nr;++j)
  29. {
  30. if(nr%P[j]) continue;
  31. al = 0;
  32. while(nr%P[j]==0)
  33. {
  34. nr/=P[j];
  35. ++al;
  36. }
  37. pr*=(al+1);
  38. }
  39. if(nr>1)
  40. pr*=2;
  41. return pr;
  42. }
  43.  
  44. int main()
  45. {
  46. ciur();
  47. ifstream f("divizori4.in");
  48. f>>n>>c;
  49. for(int i=1;i<=n;++i)
  50. f>>v[i];
  51. f>>p;
  52. nrp=v[p];
  53. nrdivp=numardiv(nrp);
  54. ofstream g("divizori4.out");
  55. if(c==1)
  56. {
  57. g<<nrdivp<<'\n';
  58. return 0;
  59. }
  60. sort(v+1,v+1+n,greater<int>());
  61. for(int i=1;i<=n;++i)
  62. {
  63. nrd=numardiv(v[i]);
  64. if(nrd==nrdivp)
  65. g<<v[i]<<' ';
  66. }
  67. return 0;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement