Cod sursa(job #787342)

Utilizator stefanzzzStefan Popa stefanzzz Data 13 septembrie 2012 10:53:33
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include <fstream>
#include <vector>
#define RADN 1000001
#define NRM 9973
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");

struct divizori{
    int put;
    long long nr;};

int t;
long long n,S,p,x;
bool ciur[RADN+5];
vector<int> prime;
vector<divizori> div;
divizori aux;

int main()
{
    int i,j,k;
    prime.push_back(2);
    for(i=3;i<=RADN;i+=2){
        if(!ciur[i]){
            prime.push_back(i);
            for(j=i;j<=RADN;j+=2*i)
                ciur[j]=1;}}
    f>>t;
    for(j=1;j<=t;j++){
        div.clear();
        f>>n;
        for(i=0;i<prime.size()&&n>1;i++){
            if(!(n%prime[i])){
                aux.nr=prime[i];
                aux.put=0;
                while(!(n%prime[i])){
                    aux.put++;
                    n/=prime[i];}
                div.push_back(aux);}}
        if(n>1){
            aux.nr=n;
            aux.put=1;
            div.push_back(aux);}
        S=1;p=1;
        for(i=0;i<div.size();i++){
            p*=(div[i].put+1);
            x=1;
            for(k=1;k<=div[i].put+1;k++)
                x*=div[i].nr;
            x--;
            x/=(div[i].nr-1);
            S=(S*x)%NRM;}
        g<<p<<' '<<S<<'\n';}
    f.close();
    g.close();
    return 0;
}