Cod sursa(job #2132950)

Utilizator catalinpuricoicatalinpuricoi catalinpuricoi Data 16 februarie 2018 12:12:06
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include <fstream>
#include <algorithm>
#include <vector>
#define Nmax 1000000
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
unsigned long long n,i,j,nr;
bool ciur[1000100];
vector <int> v;
void prim()
{
    v.push_back(2);
    for(unsigned long long i=3; i<=Nmax; i=i+2)
    if(ciur[i]==0)
    {
        v.push_back(i);
        for(unsigned long long j=i*3 ; j<=Nmax; j = j + (i << 1))
        ciur[j]=1;
    }
}
void rezolvare()
{
    unsigned long long x2,c,suma,ok,nr_actual,nr_div,x,calc;
    for(int i=1; i<=n; i++)
    {
        f>>x;
        x2=x;
        ok=0;
        suma=1;
        nr_div=1;
        while(x2!=1 && x/2>=v[ok])
        {
            c=v[ok];
            calc=1;
            nr_actual=0;
            while(x2%c==0)
            {
                x2=x2/c;
                nr_actual++;
                calc= calc * c;
            }
            if(calc!=1)
            {
            calc=(calc*c)%9973;
            nr_div=nr_div*(nr_actual+1);
            suma=(suma * ( (calc-1)%9973 / (c - 1)%9973 ) %9973);
            }
            ok++;
        }
        if(suma==1 && x!=1)
        {
            suma=(x+1)%9973;
            nr_div=2;
        }
        g<<nr_div<<' '<<suma<<'\n';
    }
}
int main()
{
    f>>n;
    prim();
    rezolvare();
    return 0;
}