Cod sursa(job #1620097)

Utilizator razvandraghiciDraghici Razvan razvandraghici Data 28 februarie 2016 20:34:35
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.6 kb
#include <fstream>
#include <cmath>

using namespace std;
int n, d, s, fr[10000003], v[100000], i, j, k, nrdiv, t, x, nr, a, b, p, rest, im, numitor;
int main()
{
    ifstream fin("ssnd.in");
    ofstream fout("ssnd.out");
    for(i=2;i<=1000000;i++){
        if(fr[i]==0){
            for(j=i+i;j<=1000000;j+=i){
                fr[j]=1;
            }
            v[++k]=i;
        }
    }


    nrdiv=1;
    fin>>t;
    for(i=1;i<=t;i++){
        fin>>n;
        x=n;
        t=1;
        nrdiv=1;
        s=1;
        im=1;
        while(v[t]<=sqrt(n)){
            nr=0;
            while(x%v[t]==0){
                nr++;
                x /= v[t];
            }
            nrdiv *= (nr+1);
            if(nr!=0){
                a=v[t];
                b=nr+1;
                p=1;
                while(b!=0){
                    if(b%2==1)
                        p *= a%9973;
                    a *= a%9973;
                    b /= 2;
                }
                p %= 9973;
                if(p>=1)
                    rest=p-1;
                else
                    rest=9972;
                b=9971;
                numitor=v[t]-1;
                 while(b!=0){
                    if(b%2==1)
                        im=im*numitor%9973;
                    numitor=numitor*numitor%9973;
                    b=b/2;
                }
                s*=(rest*im)%9973;
            }
            t++;
        }
        if(x!=1){
            nrdiv*=2;
            s *= (x+1);
        }
        fout<<nrdiv<<" "<<s%9973<<"\n";
    }
    return 0;
}