Cod sursa(job #1817146)

Utilizator NicolaalexandraNicola Alexandra Mihaela Nicolaalexandra Data 27 noiembrie 2016 13:45:54
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <fstream>
#include <bitset>
#define MOD 9973
using namespace std;

ifstream fin ("ssnd.in");
ofstream fout ("ssnd.out");

long long n,t,i,j,sol,nrd,nr,ap,p,x,y,k;
int v[100];
bool ciur[1000011];

/*void Invers_Modular (long long a,long long b,long long &x,long long &y){
    if (b==0){
        x = 1;
        y = 0;
    }
    else{
        long long xa,ya;
        Invers_Modular (b,a%b,xa,ya);
        x = ya;
        y = xa- (a/b)*ya;
    }


}*/
int main (){

    for (i=2;i<=1000000;i++)
        if (ciur[i] == 0){
            v[++k] = i;
            for (j=2*i;j<=1000000;j+=i)
                ciur[j] = 1;
        }

    fin>>t;
    for (;t>=1;t--){
        fin>>n;
        nrd = 1;
        sol = 1;
        for (i=1;i<=k&&v[i]*v[i]<=n;i++){
            if (n%v[i])
                continue;

            ap = 1;
            nr = v[i];
            while (n%v[i]==0){
                n/=v[i];
                nr *= v[i];
                ap++;
            }
            nrd *= ap;
            sol = (sol*(nr-1)/(v[i]-1))%MOD;
        }

        if (n > 1){
            nrd *= 2;
            sol = (sol*(n+1)) % MOD;
        }

        fout<<nrd<<" "<<sol<<"\n";
    }





    return 0;
}