Cod sursa(job #2933137)

Utilizator MrPuzzleDespa Fabian Stefan MrPuzzle Data 4 noiembrie 2022 18:12:04
Problema Suma si numarul divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.75 kb
#include<fstream>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<climits>
#include<iomanip>
#include<cstring>
#include<bitset>

#define MAX 1000000
#define MOD 9973

using namespace std;

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

//ifstream f("in.in");
//ofstream g("out.out");

long long n,t,ind;
long long p;
long long p2;
bool ok;

long long put = 1;
long long sum = 1;

bool tmpCiur[MAX+5];
long long ciur[78500];
long long ciurk=0;

void buildCiur(){

    for(int i=2;i<=MAX;i++){
        if(tmpCiur[i] == 0){

            ciurk++;
            ciur[ciurk] = i;

            for(int j=2;i*j<=MAX;j++){
                tmpCiur[i*j] = 1;
            }
        }
    }

    /*cout<<ciurk<<'\n';
    for(int i=1;i<=ciurk;i++){
        cout<<i<<": "<<ciur[i]<<'\n';
    }*/
}


int main(){

    buildCiur();

    f>>t;

    for(int i=1;i<=t;i++){
        f>>n;

        ind = 1;

        put = 1;
        sum = 1;

        while(ciur[ind] * ciur[ind] <= n && ind<=ciurk){

            p=0;
            p2=1;
            ok=0;
            while(n%ciur[ind]==0){

                ok=1;
                n/=ciur[ind];

                p++;
                p2 = (p2 * ciur[ind]%MOD)%MOD;
            }

            if(ok==1){
                put = put * (p+1);

                p2 = (p2 * ciur[ind]%MOD)%MOD - 1;
                sum = (sum * (p2 / (ciur[ind]-1))%MOD )%MOD;
            }


            ind++;

        }
        if(n>1){

            put = put * 2;

            p2 = ((n % MOD) * (n % MOD))%MOD - 1;
            sum = (sum * (p2 / (n-1))%MOD )%MOD;
        }

        g<<put<<" "<<sum<<'\n';
    }


    f.close();
    g.close();
    return 0;
}