Cod sursa(job #3302128)

Utilizator IacobTudorIacob Tudor IacobTudor Data 3 iulie 2025 17:19:11
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <bits/stdc++.h>

using namespace std;
bool p[1000005];
long long v[3],P[1000005],k;
const long long mod=9973;
void descompunere_in_factori_primi (long long x)
{
    long long exp, d=1, nrdiv=1, s=1, p=1,j;
    while(x>1)
    {
        exp=0;
        while(x%P[d]==0)
        {
            exp++;
            x/=P[d];
        }
        nrdiv*=(exp+1);
        p=1;
        for (j=1; j<=exp+1; j++)
            p*=P[d];
        s*=(p-1)/(P[d]-1);
        s%=mod;
        d++;
        if(P[d]*P[d]>x&&x>1){
            nrdiv*=2;
            s*=1+x;
            s%=mod;
            x=1;
        }
    }
    s%=mod;
    v[1]=nrdiv;
    v[2]=s;
}
int main()
{
    for(int i=2;i<1000005;i++)p[i]=true;
    for(int i=2;i<1000005;i++){
        if(p[i]){
            P[++k]=i;
            for(int j=2*i;j<1000005;j+=i)p[j]=false;
        }
    }
    FILE *fin, *fout;
    fin=fopen ("ssnd.in", "r");
    fout=fopen ("ssnd.out", "w");
    long long t;
    long long x;
    fscanf (fin, "%lld", &t);
    for (long long i=1; i<=t; i++)
    {
        fscanf (fin, "%lld", &x);
        descompunere_in_factori_primi(x);
        fprintf (fout, "%lld %lld\n", v[1], v[2]);
    }
    fclose (fin);
    fclose (fout);
    return 0;
}