Cod sursa(job #3263804)

Utilizator LucaMirsolea14Luca Mirsolea LucaMirsolea14 Data 16 decembrie 2024 15:50:46
Problema Suma si numarul divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.68 kb

#include<fstream>
#define int long long
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=rez*aa%M;
    aa=aa*aa%M;
}
return rez;
}

int32_t 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++;
                y=Invers_Modular(d);
                n=n*y%M;;
                prod=prod*d%M;
            }
            //fout<<d<<" "<<exp<<endl;
        nrdiv=nrdiv*(exp+1)%M;
        prod--;
        y=Invers_Modular(d-1);
        prod=prod*y%M;
        sumdiv=sumdiv*prod%M;
        }

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



/*
#include<fstream>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
int main(){
int q,n,exp,d,prod,nrdiv,sumdiv;
fin>>q;
while(q--){
    fin>>n;
    sumdiv=1;
    nrdiv=1;
    while(n>1){

            exp=0;
            prod=1;
            while(n%d==0){
                exp++;
                n/=d;
                prod*=d;
            }
            if(exp){
             prod*=d;
             nrdiv=nrdiv*(exp+1);
             sumdiv=sumdiv*((prod-1)/(d-1));
            }
            d++;
            //if(d*d>n)
             //   d=n;
    }

    fout<<nrdiv<<" "<<sumdiv<<'\n';
}
}
*/