Saleh127

Spoj DIVSUMHARD

Jul 6th, 2020
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.17 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long int
  4. #define ul unsigned long long
  5. #define maX 100000002
  6. bool marked[maX];
  7. vector<int>p;
  8. void sieve()
  9. {
  10. marked[0]=1;
  11. marked[1]=1;
  12. p.push_back(2);
  13. for(ll i=4;i<=maX;i+=2)
  14. {
  15. marked[i]=1;
  16. }
  17. for(ll i=3;i<=maX;i+=2)
  18. {
  19. if(marked[i]==0)
  20. {
  21. for(ll j=i*i; j<=maX; j+=i+i)
  22. {
  23. marked[j]=1;
  24. }
  25. }
  26. }
  27. for(ll i=3;i<=maX;i+=2)
  28. {
  29. if(marked[i]==0)
  30. {
  31. p.push_back(i);
  32. }
  33. }
  34. }
  35. ll fact(ll n)
  36. {
  37. ul sum=1;
  38. ll i,j,k,l;
  39. for(i=0;p[i]*p[i]<=n && i<p.size();i++)
  40. {
  41. if(n%p[i]==0)
  42. {
  43. ll f=1,x=1;
  44. while(n%p[i]==0)
  45. {
  46. f*=p[i];
  47. x+=f;
  48. n/=p[i];
  49. }
  50. sum*=x;
  51. }
  52. }
  53. if(n>1)
  54. {
  55. sum*=(1+n);
  56. }
  57. return sum;
  58. }
  59. int main()
  60. {
  61.  
  62. ll n;
  63. sieve();
  64. int t;
  65. cin>>t;
  66. while(t--)
  67. {
  68. cin>>n;
  69. if(n==0) return 0;
  70. cout<<fact(n)-n<<endl;
  71. }
  72.  
  73. return 0;
  74. }
Advertisement
Add Comment
Please, Sign In to add comment