Cod sursa(job #3362240)

Utilizator MesterelllMester Darius Mesterelll Data 4 august 2026 17:51:50
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.72 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}; // 1 = nu e prim
    ciur[0]=1;
    ciur[1]=1;

    for(int i=6; i<=lim; i+=6){ // 12 18 24 30

        if(ciur[i-1]==0)
            for(long long j= 1LL*(i-1)*(i-1); j<=lim; j+=(i-1))
                ciur[j]=1;
        if(ciur[i+1]==0)
            for(long long j= 1LL*(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() && 1LL * prime[p]*prime[p] <= n; p++)
        {
            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%9973;
                    power = power * prime[p] % 9973;
                    s=(s+power)%9973;
                }
                sum=sum*s % 9973;
            }

        }

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

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

    return 0;
}