Cod sursa(job #2859826)

Utilizator razvan.chChelariu Razvan Dumitru razvan.ch Data 1 martie 2022 23:25:43
Problema Suma si numarul divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include<bits/stdc++.h>
using namespace std;
#define mod 9973
#define nmax 1000005
#define ll long long


FILE *in=fopen("ssnd.in","r");
FILE *out=fopen("ssnd.out","w");

bool c[nmax]={0};
int val[nmax],t,n,x;

inline void ciur()
{
    c[0]=1;c[1]=0;
    for(int i=2;i<=nmax;i++)
    {
        if(c[i]==0)
        {
            val[++x]=i;
            for(int j=2*i;j<=nmax;j+=i)
                c[j]=1;
        }
    }

}
int putere(int nr,int put)
{
    long long p=1;
    while(put)
    {
        p*=nr;
        put--;
    }
    return p;
}

inline void solve()
{
    fscanf(in,"%d",&n);
    ll ans=1;
    ll sum=1;
    for(int d=1;val[d]*val[d]<n;d++)
    {
        if(n%val[d]==0)
        {
            int e=1;
            while(n%val[d]==0)
            {
                ++e;
                n/=val[d];
            }
            ans*=e;
            sum*=(putere(val[d],e)-1/(val[d]-1))%mod;

        }

    }
    if(n!=1)
    {
        ans*=2;
        sum*=(((n*n)-1)/(n-1))%mod;
    }
    fprintf(out,"%d %d\n",ans,sum);

}
int main()
{
    static int s=1,cnt=1;
    fscanf(in,"%d",&t);
    ciur();
    for(int i=1;i<=t;i++)
    {
        solve();
    }


    return 0;
}