Cod sursa(job #1468495)

Utilizator andreiudilaUdila Andrei andreiudila Data 6 august 2015 10:56:17
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include <fstream>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
char c[1000005];
int prime[1000000],nr;
void ciur()
{
    int i=0;
    int j=0;
    c[0]=c[1]=1;
    for(i=2; i*i<=1000000; i++)
        if(c[i]==0)
        {
            for(j=i*i; j<=1000000; j=j+i)
                c[j]=1;
        }
    for(i=2;i<=1000000;i++)
        if(c[i]==0) prime[++nr]=i;
}
long long pow(long long a, long long b)
{
    long long rez=1;
    while(b>0)
    {
        if(b%2==0)
        {
            a=a*a;
            b=b/2;
        }
        else
        {
            rez=rez*a;
            b--;
        }
    }
    return rez;
}


long long    t,i,x,d=1,nrdiv,p,n,f,suma=1,calc;
int main()
{
    nrdiv=1;
    ciur();
    fin>>t;
    for(i=1; i<=t; i++)
    {
        fin>>n;
        d=1;
        nrdiv=1;
        suma=1;

        while(n!=1 && d<=nr)
        {

            p=0;

            while(n%prime[d]==0)
            {
                n=n/prime[d];
                p++;
            }

            nrdiv=nrdiv*(p+1);
            calc=(pow(prime[d],p+1)-1)/(prime[d]-1);
            suma=suma*calc;

            d++;
        }
        if(n>1)
        {


            nrdiv=nrdiv*2;
            suma=suma*(pow(n,2)-1)/(n-1);
        }
        fout<<nrdiv<<" "<<suma%9973<<'\n';

    }

    return 0;
}