Cod sursa(job #3256724)

Utilizator SanduCatalinSandu Catalin SanduCatalin Data 15 noiembrie 2024 22:09:26
Problema Suma si numarul divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include<iostream>
#include<fstream>
#define LL long long
#define mod 9973
using namespace std;

LL ppow(LL x,LL p){
    LL pp=1;
    while(p){if(p&1){pp=(pp*x)%mod;}x=(x*x)%mod;p>>=1;}
    return pp;
}

void sol(LL n,LL &nr, LL &s){
    LL i,d;
    for(d=2;d*d<=n;d++){if(!(n%d)){
        for(i=2;i*i<=d;i++){if(!(d%i)){break;}}
        if(i*i>d){LL pd=0;while(!(n%d)){pd++;n/=d;}
            nr*=pd+1;
            s=(s%mod)*(((ppow(d,pd+1)-1)%mod*(ppow(d-1,mod-2)%mod))%mod);
        }
    }}if(n>1){nr<<=1;s=(s%mod)*(((ppow(n,2)-1)%mod*(ppow(n-1,mod-2)%mod))%mod);}
}

int main(){
    ifstream in("ssnd.in");ofstream out("ssnd.out");
    LL n,s,nr;in>>n;
    while(in>>n){s=1,nr=1;
        sol(n,nr,s);out<<nr<<" "<<s<<endl;
    }
}