Cod sursa(job #2254462)

Utilizator ciutanpCiuta Andrei Calin ciutanp Data 5 octombrie 2018 14:01:19
Problema Suma si numarul divizorilor Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include<bits/stdc++.h>
#define MOD 9973
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
int prim[1000005],k,q;
bitset<1000005>viz;
void ciur()
{

    for(int i=2;i<1000005;++i)
    {
        if(viz[i]==0)
        {
            prim[++k]=i;
            for(int j=i+i;j<1000005;j+=i)
            {
                viz[j]=1;
            }
        }
    }

}
inline int po(int x,int y)
{
    int ras=1;
    while(y)
    {
        if(y%2)
            ras=(ras*x)%MOD;
        x=(x*x)%MOD;
        y>>=1;
    }
    return ras;
}
void du(){
    int n,s=1,d=1;
    f>>n;
    for(int i=1;i<=k && prim[i]*prim[i]<=n;++i)
    {
        if(n%prim[i]==0)
        {
            int pu=0;
            while(n%prim[i]==0)
            {
                n/=prim[i];
                pu++;
            }
            d*=(pu+1);
            int p1=(po(prim[i],pu+1)-1)%MOD;
            int p2=po(prim[i]-1,MOD-2)%MOD;
            s=(((s*p1)%MOD)*p2)%MOD;
        }
    }
    if(n>1)
    {
        d*=2;
        s=(s*(n+1))%MOD;
    }
    g<<d<<' '<<s<<'\n';
}

void solve()
{
    f>>q;
    while(q--)
    {
        du();
    }
}
int main()
{
    ciur();
    solve();
}