Cod sursa(job #3362165)

Utilizator iulia_toderica16Iulia Toderica iulia_toderica16 Data 3 august 2026 23:23:38
Problema Suma si numarul divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.73 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

int main()
{
    ifstream fin("ssnd.in");
    ofstream fout("ssnd.out");
    const long long lim = 1000000;
    bool ciur[lim+1]={0};
    ciur[0]=1;
    ciur[1]=1;
    for(int i=4; i*i<=lim; i++)
        ciur[i]=1;
    for(int i=9; i*i<=lim; i++)
        ciur[i]=1;
    for(int i=6; i*i<=lim; i+=6){

        if(ciur[i-1]==0)
            for(int j=(i-1)*(i-1); j<=lim; j+=(i-1))
                ciur[j]=1;
        if(ciur[i+1]==0)
            for(int j=(i+1)*(i+1); j<=lim; j+=(i+1))
                ciur[j]=1;
    }

    vector<int>prime;
    prime.push_back(2);
    prime.push_back(3);
    for(int i=6; i<=lim; i+=6)
    {
        if(ciur[i-1]==0)
            prime.push_back(i-1);
        if(ciur[i+1]==0)
            prime.push_back(i+1);
    }

    long long t, n;
    fin>>t;
    for(int i=1; i<=t; i++)
    {
        fin>>n;
        long long cnt=1, sum=1;
        for(int p=0; p<=prime.size()-1; p++)
        {
            if(prime[p]*prime[p]>n)
                break;
            if(n%prime[p]==0)
            {
                int exp=0;

                while(n%prime[p]==0)
                {
                    n/=prime[p];
                    exp++;
                }
                cnt*=(exp+1);
                long long power=1, s=1;
                for(int j=1; j<=exp; j++)
                {
                    power*=prime[p]%9973;
                    s=(s+power)%9973;
                }
                sum=sum*s%9973;
            }



        }
        if(n>1)
        {
            cnt*=2;
            sum*=(1+n)%9973;
        }

        fout<<cnt<<" "<<sum<<'\n';
    }

    return 0;
}