Cod sursa(job #3226298)

Utilizator Dia3141Costea Diana Stefania Dia3141 Data 20 aprilie 2024 20:44:07
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("ssnd.in");
ofstream cout("ssnd.out");
const int dim=1e6,mod=9973;
bool ciur[dim+2];
vector<int>nrp;
int p,t,s,d;
long long n;
int exp(int a,int b){
    int p=1;
    while(b!=0){
        if(b%2!=0)
            p=1LL*a*p%mod;
        b/=2;
        a=1LL*a*a%mod;
    }
    return p;
}
int main()
{
    ciur[0]=ciur[1]=1;
    for(int i=2;i<=dim;i++)
        if(!ciur[i]){
            nrp.push_back(i);
            p++;
            for(int j=2*i;j<=dim;j+=i)
                ciur[j]=1;
        }
    cin>>t;
    while(t--){
        cin>>n;
        s=d=1;
        for(int i=0;i<p&&1LL*nrp[i]*nrp[i]<=n;i++)
            if(n%nrp[i]==0){
                int e=0;
                long long x=nrp[i];
                while(n%nrp[i]==0){
                    n/=nrp[i];
                    e++;
                    x*=nrp[i];
                }
                x=(x-1)%mod;
                s=1LL*s*x%mod*exp(nrp[i]-1,mod-2)%mod;
                d*=(e+1);
            }
        if(n!=1){
            s=1LL*s*(1LL*n*n-1)%mod*exp(n-1,mod-2)%mod;
            d*=2;
        }
        cout<<d<<" "<<s<<'\n';
    }
    return 0;
}