Cod sursa(job #2471811)

Utilizator bogfodorBogdan Fodor bogfodor Data 11 octombrie 2019 16:17:57
Problema Suma si numarul divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <iostream>
#include <fstream>
#define mod 9973

using namespace std;

int modpow(int b, int e)
{
    int rez=1;
    for(;e;e>>=1)
    {
        if(e&1)
            rez=(rez*b)%mod;
        b=(b*b)%mod;
    }
    return rez;
}


void dfp(int x, int &sd, int &pd)
{
    sd=1; pd=1;
    int p=0;
    while(x%2==0)
        x/=2,p++;
    sd*=(p+1);
    int sus=modpow(2,p+1),jos=1;
    jos=modpow(jos,mod-2);
    pd=((pd*(sus-1))%mod *jos)%mod;
    for(int d=3;d*d<=x;d+=2)
    {
        p=0;
        while(x%d==0)
            x/=d,p++;
        sus=modpow(d,p+1);
        jos=d-1;
        pd=(pd*(sus-1))%mod;
        jos=modpow(jos,mod-2);
        pd=(pd*jos)%mod;
    }
    if(x!=1)
        sd*=2,pd*=(x+1);
}

int main()
{
    ifstream fin("fis.in");
    int t;
    fin>>t;
    while(t--)
    {
        int x,s,p;
        fin>>x;
        dfp(x,s,p);
        cout<<s<<" "<<p<<"\n";
    }

    return 0;
}