Cod sursa(job #2174815)

Utilizator AndreiD31Dragan Andrei AndreiD31 Data 16 martie 2018 13:38:10
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.66 kb
#include <fstream>
#include <iostream>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");


int putere1(int baza,int putere)
{

    int P=1;
    baza=baza%9973;
    while(putere!=0)
    {
        if(putere%2==1)
        {
            P=(P*baza)%9973;
            putere--;
        }
        else
        {
            putere=putere/2;
            baza=(baza*baza)%9973;
        }
    }

    return P%9973;


}





long long d,t,i,prod,n,x,N,p,prod1,j,NR_DIV,SUMA_DIV,v[300001];
bool a[1000005];

int main()
{
//g<<(sizeof(a)+sizeof(v))/1024.0<<'\n';
    a[1]=1;
    a[0]=1;
    for(d=2; d<1000005; d++)
        if(a[d]==0)
        {
            t++;
            v[t]=d;
            for(i=d+d; i<1000005; i=i+d)
                a[i]=1;
        }



    N=t;
    f>>n;
    for(i=1; i<=n; i++)
    {
        f>>x;
        t=1;

        NR_DIV=1;
        SUMA_DIV=1;
        while(v[t]*v[t]<=x&&t<=N)
        {

            if(x%v[t]==0)
            {

                p=0;
                prod=1;

                while(x%v[t]==0)
                {
                    p++;
                    prod=prod*v[t];
                    x=x/v[t];
                }


                NR_DIV=NR_DIV*(p+1);

               // prod=putere1(v[t],p+1)-1;
               // prod1=putere1(v[t]-1,9971);
                SUMA_DIV=SUMA_DIV*((prod*v[t]-1)/(v[t]-1))%9973;

            }

            t++;
        }


        if(x!=1)
        {
            NR_DIV=NR_DIV*2;
            SUMA_DIV=(SUMA_DIV*(x+1))%9973;
        }


        g<<NR_DIV<<" "<<SUMA_DIV%9973<<'\n';
    }



    return 0;
}