Advertisement
Guest User

Untitled

a guest
Jun 26th, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.09 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<math.h>
  3. int Prime[(1<<23)+100];
  4. int pos[1<<24], PLEN;
  5. int flag[105];
  6. #define prime(i) ((Prime[i>>5])&(1<<(i&(31))))
  7. #define set(j) (Prime[j>>5]|=(1<<(j&(31))))
  8. #define LIM 100000007
  9. #define SLIM 10000
  10. int sieve()
  11. {
  12.     int i, j,k,l,h;
  13.     set(1);
  14.     pos[0]=2;
  15.     pos[1]=3;
  16.     for(k=2,l=2,i=5; i<=SLIM; k++,i=3*k-(k&1)-1)
  17.         if(prime(i)==0)
  18.         {
  19.             pos[l++]=i;
  20.             for(j=i*i,h=!(k&1); j<=LIM; h=!h,j+=(1+h)*(i<<1))
  21.             set(j);
  22.         }
  23.     i=3*k-(k&1)-1;
  24.     for(; i<=LIM; k++,i=3*k-(k&1)-1)
  25.     if(prime(i)==0)
  26.     pos[l++] = i;
  27.     PLEN=l;
  28. }
  29. int main()
  30. {
  31.     int i, j, k, count, ans, flag, back, s,tmp,t;
  32.     long long int prod, dsum, n;
  33.     sieve();
  34.     scanf("%d",&t);
  35.     while(t--)
  36.     {
  37.         scanf("%lld",&n);
  38.         flag=count=0;
  39.         ans=1;dsum=1;
  40.         back=n;
  41.         s=sqrt(n);s++;
  42.         for(i=0; pos[i]<=n&&pos[i]<=s; i++)
  43.         {
  44.             count=0;
  45.             prod=1;
  46.             while(n&&n%pos[i]==0)
  47.             {
  48.                 n/=pos[i];
  49.                 count++;
  50.                 prod*=pos[i];
  51.             }
  52.             if(count)
  53.                 dsum=dsum*((prod*pos[i]-1)/(pos[i]-1));
  54.                
  55.         //  printf("%lld\n",dsum);
  56.         }
  57.         if(n>1)
  58.         dsum*=n+1;
  59.         printf("%lld\n",dsum-back);
  60.     }
  61.     return 0;
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement