Cod sursa(job #460046)

Utilizator crawlerPuni Andrei Paul crawler Data 1 iunie 2010 01:38:27
Problema Sum Scor 85
Compilator c Status done
Runda Arhiva de probleme Marime 0.66 kb
#include <stdio.h>
#include <string.h>

#define Nmax 1024
#define ll long long

int nr, a[100100][32], dim[100100], ret;
ll lim;

ll back(int lvl, ll prod) {
  if (lvl == dim[nr])
    return lim*(lim/prod+1)/2;
  return back(lvl+1,prod) - back(lvl+1,prod*a[nr][lvl]);
}

int main() {
  freopen("sum.in", "r", stdin);
  freopen("sum.out", "w", stdout);

  int t,i,j;
  
  scanf("%d", &t);
  
  for (i = 2; i < 100100; ++i)
    if (dim[i] == 0) {
      for (j = i; j < 100100; j += i)
        a[j][dim[j]++] = i;
    }

  while (t--) {
    scanf("%d", &nr);
    lim = nr << 1;
    printf("%lld\n", back(0,1));
  }
  
  return 0;
}