Cod sursa(job #2503635)

Utilizator TudorCretuCretu Tudor Andrei TudorCretu Data 3 decembrie 2019 15:55:34
Problema Suma si numarul divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
#include <iostream>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
long long n,s,r,j,t,i,v[100001],k,nr,d;
char c[1000000];
long long putere(long long x, long long n)
{
    long long a;
    if(n==0) return 1;
    else if(n==1) return x;
    else
        {
            a=putere(x,n/2);
            if(n%2==0) return (a*a)%9973;
            else return ((a*a)%9973*x)%9973;
        }
}
int main()
{
    f>>t;
    c[0]=c[1]=1;
    for(i=2;i<=1000000;i++)
    {
        if(c[i]==0)
        {
            for(j=i*i;j<=1000000;j+=i)
                c[j]=1;
            v[++k]=i;
        }
    }
    for(i=1;i<=t;i++)
    {
        f>>n;
        nr=1;
        s=1;
        j=1;
        while(n>1 && v[j]*v[j]<=n)
        {
            d=0;
            while(n%v[j]==0)
            {
                n/=v[j];
                d++;
            }
            if(d)
            {
                r=putere(v[j],d+1);
                s*=(r-1)/(v[j]-1)%9973;
            }
            nr*=(d+1);
            j++;
        }
        if(n>1){nr*=2; s*=(n*n-1)/(n-1)%9973;}
        g<<nr<<" "<<s<<'\n';
    }
}