Cod sursa(job #1610516)

Utilizator RaduMirceaAndreiRadu Mircea Andrei RaduMirceaAndrei Data 23 februarie 2016 16:45:07
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
# include <fstream>
# define DIM 1000010
# define dim 78509
# define MOD 9973
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
int f[DIM],d[dim];
long long n,i,j,k,t,r,ok,nr,p,s,val1,val2;
int putere(int a,int b){
    if(b==0)
        return 1;
    else{
        int x=putere(a,b/2);
        if(b%2==0)
            return (x*x)%MOD;
        else
            return (x*x*a)%MOD;
    }
}
int main () {
    ok=0;
    for(i=2;i<=DIM-1;i++){
        if(f[i]==0){
            d[++k]=i;
            for(j=2*i;j<=DIM-1;j+=i)
                f[j]=1;
        }
    }
    fin>>t;
    for(r=1;r<=t;r++){
        fin>>n;
        i=1;
        s=1;
        p=1;
        while(n!=1&&i<=k&&d[i]*d[i]<=n){
            nr=0;
            while(n%d[i]==0){
                nr++;
                n/=d[i];
            }
            val1=putere(d[i],nr+1);
            val2=putere(d[i]-1,MOD-2);
            if(val1-1>-1)
                s*=(val1-1)*val2%MOD;
            else
                s*=(MOD-1)*val2%MOD;
            p*=(nr+1);
            i++;
        }
        if(n!=1){
            p*=2;
            s*=(n+1)%MOD;
        }
        fout<<p<<" "<<s<<"\n";
    }
    return 0;
}