Cod sursa(job #2495048)

Utilizator VladMxPMihaila Vlad VladMxP Data 18 noiembrie 2019 20:11:00
Problema Suma si numarul divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <iostream>
#include <fstream>
#include <cmath>
#define N 1000000
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
int t;
bool p[N];
long long n,mx,nr[1001];
void ciur(long long mx)
{
    for(int k=2;k<=mx;k++)p[k]=1;
    for(int k=2;k<=sqrt(mx)+1;k++)
    {
        if(p[k])
        {for(int k2=2;k2<=mx/k;k2++)
        {
            p[k2*k]=0;
        }
        }
    }
}
void ssnd(long long n)
{
    int k=2,n2=n,nrd=1,sd=1;
    while(k<=n2/2&&n>1)
    {
        int e=0,n3=1;
        while(n%k==0)
        {
            n/=k;
            e++;
            n3*=k;
        }
        if(e>0)
        {
            nrd=nrd*(e+1);
            sd=sd*(n3*k-1)/(k-1);
        }
        k++;
        while(k<=n2/2&&p[k]==0)k++;
    }
    if(n!=1)
    {
        nrd++;
        sd+=n;
    }
    fout<<nrd<<" "<<sd<<'\n';
}
int main()
{
    fin>>t;
    for(int i=1;i<=t;i++)
    {
        fin>>nr[i];
        if(nr[i]>mx)mx=nr[i];
    }
    ciur(mx);
    for(int i=1;i<=t;i++)ssnd(nr[i]);
}