Cod sursa(job #2738650)

Utilizator AndreiD31Dragan Andrei AndreiD31 Data 6 aprilie 2021 10:32:00
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.28 kb
#include <bits/stdc++.h>
#define mod 9973

using namespace std;

ifstream f("ssnd.in");
ofstream g("ssnd.out");

long long putere(long long baza, long long exp)
{
    if(exp==0)return 1;
    if(exp==1)return baza;
    if(exp%2==0)return putere((baza*baza)%mod,exp/2);
    if(exp%2==1)return (baza*putere(baza,exp-1))%mod;
}

bool a[1000010];
long long i,d,nr_div,t,k,pas,nr,suma_div,x,prim[100100];

int main()
{

    for(d=2;d<=1000000;d++)
    {
        if(a[d]==0)
        {
            t++;prim[t]=d;
            for(i=d*d;i<=1000000;i+=d)
                a[i]=1;
        }
    }

    f>>t;
    for(pas=1;pas<=t;pas++)
    {
        f>>x;
        k=1;nr_div=1,suma_div=1;
        while(prim[k]*prim[k]<=x)
        {
            if(x%prim[k]==0)
            {
                nr=0;
                while(x%prim[k]==0)x/=prim[k],nr++;

                nr_div=nr_div*(nr+1);
                suma_div=(suma_div*((putere(prim[k],nr+1)-1+mod)%mod)*(putere(prim[k]-1,mod-2)%mod))%mod;
            }
            k++;
        }
        if(x!=1)
        {
            nr_div*=2;
            nr=1;
            suma_div=(suma_div*(putere(x,nr+1)-1+mod)%mod*putere(x-1,mod-2)%mod)%mod;
        }

        g<<nr_div<<" "<<suma_div<<'\n';
    }
    return 0;
}