Cod sursa(job #2373798)

Utilizator CojocaruVicentiuCojocaru Vicentiu CojocaruVicentiu Data 7 martie 2019 15:22:11
Problema Suma si numarul divizorilor Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.44 kb
#include<fstream>
#define mod 9973
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
long long t,i,j,n,nrpr,sum,put,nr,k,c[1000010],v[1000010];
void ciur()
{
    c[1]=1;
    for(i=1;i<=1000010;i++)
        if(c[i]==0)
        {
            nrpr++;
            v[nrpr]=i;
            for(j=2*i;j<=1000010;j+=i)
                c[j]=1;
        }

}
long long putere (long long a, long long b)
{
    int aux;
    if(b==0)
        return 1;
    if(b==1)
        return a%mod;
    aux=putere(a,b/2);
    if(b%2==0)
        return (aux*aux)%mod;
    else
        return ((aux*aux)%mod * a %mod)%mod;
}
int main()
{
    fin>>t;
    ciur();
    for(i=1;i<=t;i++)
    {
        fin>>n;
        sum=1;
        nr=1;
        for(k=1;k<=nrpr && v[k]*v[k]<=n ;k++)
        {
            j=v[k];
            if(n%j==0)
            {
                put=1;
                n/=j;
                while(n%j==0)
                {
                    put++;
                    n/=j;
                }
                nr*=(put+1);
                sum=(sum%mod * ( (putere(j,put+1) - 1 + mod) % mod * putere(j-1,mod-2) % mod) %mod)%mod;
            }
        }
        if(n>1)
        {
            nr*=2;
            sum=(sum%mod * ( (putere(n,2) - 1 + mod) % mod * putere(n-1,mod-2) % mod) %mod)%mod;
        }
        fout<<nr<<' '<<sum<<'\n';
    }

    fin.close();
    fout.close();
    return 0;
}