Cod sursa(job #3272731)

Utilizator FRD233Fodor Rares-Costin FRD233 Data 30 ianuarie 2025 19:51:28
Problema Suma si numarul divizorilor Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
long long n;
int t;
bool ci[1000001];
long long prime[400001];
int k;
#define MOD 9973
void ciur()
{   ci[1]=ci[0]=1;
    for(int i=2;i*i<=1e6;i++)
        if(!ci[i])
            for(int j=2;i*j<=1000001;j++) ci[i*j]=1;
    for(int i=2;i<=1000001;i++)
        if(!ci[i]) prime[++k]=i;
}
int putere(int a, int n)
{   int p=1;
    for(int k=1;k<=n;k<<=1)
    {   if(n&k) p=p*a%MOD;
        a=a*a%MOD;
    }
    return p;
}
int nrdiv,sum;
void rezolvare(long long n)
{   nrdiv=1;
    sum=1;
    int d=1;
    while(n>1)
    {   int put=0;
        while(n%prime[d]==0)
        {   put++;
            n/=prime[d];
        }
        if(put!=0)
        {   nrdiv=nrdiv*(put+1)%MOD;
            sum=sum*(putere(prime[d],put+1)-1)%MOD*putere(prime[d]-1,MOD-2)%MOD;
        }
        d++;
    }
    if(n!=1)
    {   nrdiv=2;
        sum=sum*(1+n)%MOD;
    }
}
int main()
{   ciur();
    f>>t;
    while(t--)
    {   f>>n;
        rezolvare(n);
        g<<nrdiv<<" "<<sum<<'\n';
    }
    return 0;
}