Cod sursa(job #1611399)

Utilizator ASTELOTudor Enescu ASTELO Data 24 februarie 2016 08:55:23
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include<cstdio>
char ciur[1000001];
int i,j,m,k,t,v[200001],p=2,up=1000,cate;
long long pow(long long n,long long k)
    {
    int p=1;
    for(int qq=1;qq<=k;qq++)
        p*=n;
    return p;
    }
long long n;
int main ()
{
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
while(p<=up)
    {
    for(i=2;i*p<=1000000;i++)
        ciur[i*p]=1;
    p++;
    while(ciur[p]==1)
        p++;
    }
for(i=2;i<=1000000;i++)
    if(ciur[i]==0)
        v[++cate]=i;
scanf("%d",&t);
for(j=1;j<=t;j++)
    {
    scanf("%lld",&n);
    int nr=1;
    long long sum=1;
    for(i=1;i<=cate;i++)
        {
        int nr1=0;
        while(n%v[i]==0)
            {
            nr1++;
            n/=v[i];
            }
        nr=nr*(nr1+1);
        sum=sum*(pow(v[i],nr1+1)-1)/(v[i]-1);
        }
    printf("%d %d\n",nr,sum);
    }
return 0;
}