Cod sursa(job #3263822)

Utilizator LucaMirsolea14Luca Mirsolea LucaMirsolea14 Data 16 decembrie 2024 16:09:33
Problema Suma si numarul divizorilor Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb

#include<fstream>

using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
const int M=9973;

int Invers_Modular(int a){
int n=M-2,i,aa=a,rez=1;
for(i=n;i>=1;i=i/2){
    if(i%2==1)
        rez=(1ll*rez*aa)%M;
    aa=(1ll*aa*aa)%M;
}
return rez;
}

int main(){
int q,n,exp,d,prod,nrdiv,sumdiv,y,x;
fin>>q;
while(q--){
    fin>>n;
    sumdiv=1;
    nrdiv=1;
    for(d=2;d*d<=n;d++){
        if(n%d==0){
            exp=0;
            prod=d;
            while(n%d==0){
                exp++;
                prod=(prod*d) %M;
                n=n/d;
            }
            //fout<<d<<" "<<exp<<endl;
        nrdiv=(nrdiv*(exp+1))%M;
        prod--;

        if(prod<0)
            prod+=M;

        y=Invers_Modular(d-1);
        prod=(prod*y)%M;
        sumdiv=(sumdiv*prod)%M;
        }

    }
    if(n>1){
        nrdiv=(nrdiv*2)%M;
        x=(n*n-1)%M;
        y=Invers_Modular(n-1);
        x=(x*y)%M;
        sumdiv=(sumdiv*x)%M;
    }
     //fout<<endl;
    fout<<nrdiv<<" "<<sumdiv<<'\n';
}
}