Cod sursa(job #613395)

Utilizator ucnahHancu Andrei ucnah Data 23 septembrie 2011 22:57:03
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include <cstdio>
#include <math.h>

using namespace std;
int t,x,a[1000005],ciur[1000005],prod=1,nr,sumadiv=0;
void ciurul()
{
    int p=2,i;
    while(p*p<=1000000)
    {
        for(i=p+p;i<=1000000;i+=p)
        {
            a[i]=-1;
        }
        for(int j=p+1;j<=1000000;j++)
        {
            if(a[j]!=-1)
            {
                p=j;
                break;
            }
        }
    }
     for(int i=2;i<=1000000;i++)
            if(a[i]==0)
                ciur[nr++]=i;

}
int main()
{
    freopen("ssnd.in","r",stdin);
    freopen("ssnd.out","w",stdout);
    scanf("%d\n",&t);
    ciurul();
    for(int i=0;i<t;i++)
    {
        scanf("%d\n",&x);
        int sumadiv=1;
        for(int i=0;i<nr && ciur[i]*ciur[i]<=x;i++)
        {
            int nr1=0;
                while(x%ciur[i]==0)
                {
                    x/=ciur[i];
                    nr1++;
                }
                prod*=(nr1+1);
                 sumadiv*= (pow(ciur[i],(nr1+1))-1)/(ciur[i]-1);
        }
        if(x!=1)
        {
            prod*=2;
            sumadiv*=(x+1);
        }
        printf("%d %d\n",prod,sumadiv);
        prod=1;
        sumadiv=1;
    }
    return 0;
}