Cod sursa(job #2121146)

Utilizator Alex_BubBuburuzan Alexandru Alex_Bub Data 3 februarie 2018 13:07:00
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>
#include <iostream>
#define ull unsigned long long
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
int const mod=9973,nmax=1000001;
bool ci[nmax];
int v[nmax],nrd;
ull s;
void ciur()
{
    int z=1,i;
    v[0]=2;
    for(i=3;i*i<nmax;i+=2)
    {
        if(!ci[i])
        {
            v[z++]=i;
            for(int d=i*i;d<nmax;d+=i)
                ci[d]=true;
        }
    }
    for(i;i<nmax;i+=2)
    {
        if(!ci[i])
            v[z++]=i;
    }
}
ull ssnd(ull x)
{
    s=1; nrd=1;
    for(int i=0;x>1&&i<nmax;i++)
    {
        if(x%v[i])
            continue;
        ull k=1;
        int p=0;
        while(!(x%v[i]))
        {
            k*=v[i];
            p++;
            x/=v[i];
        }
        nrd*=p+1;
        s*=(k*v[i]-1)/(v[i]-1);
    }
}
int main()
{
    ciur();
    ull x;
    int n;
    for(fin >> n;n;n--)
    {
        fin >> x;
        ssnd(x);
        fout << nrd<<" "<<s%mod<<'\n';
    }
    return 0;
}