Cod sursa(job #1903433)

Utilizator RSiminicaSiminica Razvan RSiminica Data 5 martie 2017 11:29:55
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>

using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
bool v[1000010];
int suma,nr,n,t, d[80000];
void ciur()
{

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

}

void ssnr(int x)
{
    suma=1;
    nr=1;
    int putere=1;
    for(int i=1;d[i]*d[i]<=x;i++)
    {
        if(x%d[i]==0)
        {
            int p=0;
            while(x%d[i]==0)
            {
                x/=d[i];
                p++;
            }
            nr*=(p+1);
            for(int j=1;j<=p+1;j++)
            {
                putere*=d[i];
            }
            suma*=((putere-1)/(d[i]-1))%9973;
        }
    }
    if(x!=1)
    {
        nr*=2;
        suma*=((x*x-1)/(x-1))%9973;
    }
}
int main()
{
    f>>t;
    ciur();
    for(int i=1;i<=t;i++)
    {
        f>>n;
        ssnr(n);
        g<<nr<<" "<<suma<<'\n';
    }
    return 0;
}