Cod sursa(job #3254324)

Utilizator andreiciocanCiocan Andrei andreiciocan Data 7 noiembrie 2024 10:07:42
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.5 kb
#include <fstream>

using namespace std;
ifstream cin("ssnd.in");
ofstream cout("ssnd.out");
const int N=1e6;
int ciur[100001];
bool c[N+1];
void ciurE()
{
    int k=0,i;
    for(i=2;i*i<=N;i++)
    {
        if(c[i]==0)
        {
            k++;
            ciur[k]=i;
            for(int j=2*i;j<=N;j+=i)
            {
                c[j]=1;
            }
        }
    }
    for(int j=i;j<=N;j++)
    {
        if(c[j]==0)
        {
            k++;
            ciur[k]=j;
        }
    }
}
int main()
{
    int t;
    cin>>t;
    ciurE();
    for(int i=1;i<=t;i++)
    {
        long long n;
        cin>>n;
        long long suma=1;
        int nrdiv=1;
        int d=1;
        while((long long)ciur[d]*ciur[d]<=n)
        {
            if(n%ciur[d]==0)
            {
                int p=0;
                long long putere=1;
                while(n%ciur[d]==0)
                {
                    putere=(long long)(putere*ciur[d]);
                    p++;
                    n/=ciur[d];
                }
                nrdiv*=(p+1);
                putere*=(long long)ciur[d];
                putere--;
                suma=(long long)(suma*putere)/(ciur[d]-1);
            }
            d++;
        }
        if(n!=1)
        {
            nrdiv*=2;
            long long putere=1;
            putere=(long long)(n*n-1);
            suma=(long long)(suma*putere)/(n-1);
        }
        cout<<nrdiv<<" "<<suma%9973<<endl;
    }
    return 0;
}