Cod sursa(job #2505268)

Utilizator LeCapataIustinian Serban LeCapata Data 6 decembrie 2019 17:16:36
Problema Suma si numarul divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.34 kb
#include <fstream>
#include <cmath>
#define mod 9973
using namespace std;

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

long long ciur[10000005];
long long numar[1005];
int t, maxim=0, nr_div=1;
long long sum;

void ciur_E(int n)
{
    for(int i=2; i<=n; ++i)
        if(ciur[i]==0)
            for(int j=2*i; j<=n; j+=i)
                ciur[j]=1;
}

void suma(int d, int p)
{
    long long prod;
    prod=(pow(p,d+1)-1)/(p-1);

    sum*=prod;
    sum%=mod;
}

void numar_div(int n,int m)
{
    int exp=0;
    while(n%m==0 && n>1)
    {
        n/=m;
        exp++;
    }
    if(exp!=0)
    {
        nr_div*=(exp+1);
        suma(exp,m);
    }

}

int main()
{
    in>>t;
    for(int i=1; i<=t; i++)
    {
        in>>numar[i];
        if(numar[i]>maxim)
            maxim=numar[i];
    }

    ciur_E(maxim);

    for(int i=1; i<=t; i++)
    {
        nr_div=1; sum=1;
        int sem=0;
        int n=numar[i];

        if(ciur[n]==0)
        {
            nr_div=2;
            sum+=n;
        }
        else
            for(int j=2; j<=sqrt(n) && sem==0; j++)
            {
                if(ciur[j]==0)
                {
                    numar_div(n,j);
                }
            }
        out<<nr_div<<" "<<sum<<'\n';
    }
    in.close();
    out.close();
    return 0;
}