Cod sursa(job #2951814)

Utilizator AndreibatmanAndrei Croitoriu Andreibatman Data 7 decembrie 2022 13:07:54
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <bits/stdc++.h>
#define MOD 9973
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
long long n,t,i,j,d,p[1000010],sum,nr,fact;
bitset<1000000>ciur;

long long e(long long a,long long b)
{
    long long x=1,p=b,c=a;
    while(p)
    {
        if(p&1)
            x=x*c%MOD;
        c=c*c%MOD;
        p/=2;
    }
    return x;
}

void solve(long long n)
{
    sum=1;
    nr=1;
    for(i=1;i<=p[0] && p[i]*p[i]<=n;i++)
    {
        fact=0;
        while(n%p[i]==0)
        {
            n=n/p[i];
            fact++;
        }
        if(fact>0)
        {
            nr=nr*(fact+1);
            sum=sum*((e(p[i],fact+1)%MOD-1 + MOD)%MOD*e(p[i]-1,MOD-2))%MOD;
        }
    }
    if(n!=1)
    {
        nr=nr*2;
        sum=sum*((e(n,2)%MOD-1 + MOD)%MOD*e(n-1,MOD-2))%MOD;
    }
    fout<<nr<<" "<<sum<<'\n';
}
int main()
{
    ciur[0]=ciur[1]=1;
    for(i=2;i<=1000000;i++)
        if(ciur[i]==0)
        {
            p[++p[0]]=i;
            for(j=2;j*i<=1000000;j++)
                ciur[i*j]=1;
        }
    fin>>t;
    while(t--)
    {
        fin>>n;
        solve(n);
    }
    return 0;
}