Pagini recente » Cod sursa (job #687966) | Cod sursa (job #1244892) | Istoria paginii runda/sim0004 | Cod sursa (job #340331) | Cod sursa (job #171549)
Cod sursa(job #171549)
#include <stdio.h>
#include <bitset>
#define xMax 100005
#define pMax 400
using namespace std;
long n,x,i,j,r,p[200],q,d[200],k[200],nr;
long long rez[100005];
bitset <400>prim;
long power(long b,long p){
long rez=1;
if (p==1)return b;
while (p){
if ((long)p&1==1)rez=rez*b;
rez*=rez;p>>=1;
}
return rez;
}
int main(){
freopen("sum.in","r",stdin);
freopen("sum.out","w",stdout);
prim.set();
prim[1]=0;
for (i=1;i<=pMax;i++)
if (prim[i])
for (j=2;j<=pMax/i;j++)
prim[i*j]=0;
for (i=2;i<=pMax;i++)
if (prim[i])p[++q]=i;
for (i=1;i<=xMax;i++){
x=i;
j=1;
r=0;
while (p[j]*p[j]<=x){
if (x%p[j]==0){
d[++r]=p[j];
k[r]=0;
while (x%p[j]==0){
k[r]++;
x/=p[j];
}
}
j++;
}
if (x>1){d[++r]=x;k[r]=1;}
if (i==45)
nr=1;
nr=1;
for (j=1;j<=r;j++)
nr*=(d[j]-1)*power(d[j],k[j]-1);
rez[i]=(long long)2*nr*i;
}
scanf("%ld",&n);
for (i=1;i<=n;i++){
scanf("%ld",&x);
printf("%lld\n",rez[x]);
}
return 0;
}