Cod sursa(job #2219915)

Utilizator AlexandruGabrielAliciuc Alexandru AlexandruGabriel Data 9 iulie 2018 23:51:27
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>

#define N 1000001

using namespace std;

ifstream fin ("ssnd.in");
ofstream fout ("ssnd.out");

bool ciur[N];
long long prime[79000],x;
int n,k,mod=9973;

void Ciur ()
{
    ciur[1]=1;
    for (int i=4;i<=N;i+=2)
        ciur[i]=1;
    for (int i=3;i*i<=N;i+=2)
        if (!ciur[i])
        for (int j=i*i;j<=N;j+=2*i) ciur[j]=1;
    for (int i=2;i<=N;i++)
        if (!ciur[i])
    {
        k++;
        prime[k]=i;
    }
}

void Divizori (int x)
{
    long long s=x+1,cnt=2;
    for (int i=1;prime[i]*prime[i]<=x;i++)
    {
        if (x%prime[i]==0)
        {
            cnt+=2;
            s+=(prime[i]+x/prime[i]);
            s%=mod;
        }
    }
    fout<<cnt<<" "<<s%mod<<"\n";
}

int main()
{
    Ciur();
    fin>>n;
    for (int i=1;i<=n;i++)
        {
            fin>>x;
            Divizori(x);
        }
    return 0;
}