Cod sursa(job #663987)

Utilizator razvan_kusztosKusztos razvan razvan_kusztos Data 19 ianuarie 2012 13:19:22
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <cstdio>
#include <cmath>
#define M 1000000
bool ok[M];
using namespace std;
int T,c[M];
long long a,x,b,i,ndiv,s=1,nr,k;
long long powe(int a,int b)
{
    if (b==0) return 1;
    if (b%2==0)
        {
            long long aux=powe(a,b/2);
            return aux*aux;
        }
    if (b%2==1) return a*powe(a,b-1);
}
void ciur()
     {
        for(int i=2;i<M;i++)
        {
		    if(ok[i] == false)
		      {
			     c[++k] = i;
                 for(int j=i+i;j<M;j+=i)
                 {
				    ok[j] = true;
		 	     }
		}
	}
}
int main()
    {
        freopen("ssnd.in","r",stdin);
        freopen("ssnd.out","w",stdout);
        scanf("%d",&T);
        ciur();
        for(;T;T--)
        {
            s=1LL;
            ndiv=1;
            scanf("%d",&a);
            x=a;
            for (i=1;c[i]<sqrt((double)a);i++)
             {
                 nr=0;
                 while(x%c[i]==0)
                     {
                         nr++;
                         x/=c[i];
                     }
                 if(nr==0) ndiv=2;
                 else
                    ndiv*=(nr+1);
                 s*=(powe(c[i],nr+1)-1)/(c[i]-1);
             }
        printf("%lld %lld\n",ndiv,s);
        }
    }