Cod sursa(job #1790459)

Utilizator onitorektbantas onitorekt Data 28 octombrie 2016 11:46:41
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <cstdio>

using namespace std;
int exp(int y,int x)
{
    int nr=0;
    while(x%y==0)
    {
        nr++;
        x/=y;
    }
    return nr;
}
int put(int n,int x)
{
    int p=1;
    for(int i=1; i<=x; i++)
        p=p*n;
    return p;
}
int main()
{
    freopen("ssnd.in","r",stdin);
    freopen("ssnd.out","w",stdout);
    int prim,p,s,cp,j,a,b,x,nrdiv,n,i;
    scanf("%d",&n);
    for(i=1;i<=n;++i){
    scanf("%d",&x);
    prim=1;
    p=1;
    s=1;
    cp=x;
    nrdiv=1;
    for(j=2; j*j<=x; j++)
        if(cp%j==0)
        {
            prim=0;
            a=exp(j,x);
            nrdiv=nrdiv*(a+1);
            if(a%2!=0 && a%3!=0)
                p=0;
            b=put(j,a);
            s=s*(b*j-1)/(j-1);
            cp=cp/b;
        }
    if(cp>1)
    {
        s=cp+1;
        nrdiv=2;
    }
    printf("%d %d\n",nrdiv,s);}
    return 0;
}