Cod sursa(job #3167994)

Utilizator proflaurianPanaete Adrian proflaurian Data 11 noiembrie 2023 12:56:18
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include<cstdio>
#include<iostream>
#include<bitset>
using namespace std;
bitset<500010> p;
int PR[80000],*f;
int t,n,s,N,S,i,k,j;
long long T,*F,P[80000];
void ciur();
int main()
{
    freopen("ssnd.in","r",stdin);
    freopen("ssnd.out","w",stdout);
    ciur();
    cin>>t;
    for(;t;t--)
    {
        cin>>T;N=1;S=1;
        for(F=P,f=PR;*F;F++,f++)
        {
            if(*F**F>T)break;
            if(T%*F)continue;
            n=1,s=1;k=*f;
            while(T%*F==0)
            {
                n++;s+=k;T/=*F;
                k=(k**f)%9973;
            }
            S=(S*s)%9973;
            N=N*n;
        }
        if(T>1)
        {
            s=(int)T%9973+1;
            N*=2;
            S=(S*s)%9973;
        }
        cout<<N<<' '<<S<<'\n';
    }
    return 0;
}
void ciur()
{
    P[0]=2;
    for(k=1,i=3;k<500;k++,i+=2)
        if(!p[k])
        {
            P[++n]=i;
            for(j=2*k*k+2*k;j<=500000;j+=i)p[j]=1;
        }
    for(k=500,i=1001;k<=500000;k++,i+=2)
        if(!p[k])
            P[++n]=i;
    for(i=0;i<=n;i++)PR[i]=(int)(P[i]%9973);
}