Cod sursa(job #3245518)

Utilizator Danut2011PopaDanSebastian Danut2011 Data 29 septembrie 2024 11:53:51
Problema Suma si numarul divizorilor Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>

using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
const int LMAX=1000000;
long long t,n,prime[80001],nrdiv,sumdiv,cop,expo;
bool E[LMAX+1];
int main()
{
    for (int i=2;i*i<=LMAX;i++)
    {
        if (E[i]==0)
        {
            for (int j=i*i; j<=LMAX; j+=i)
            {
                E[j]=1;
            }
        }
    }
    for (int i=2;i<=LMAX; i++)
    {
        if (E[i]==0)
        {
            n++;
            prime[n]=i;
        }
    }
    fin>>t;
    for (int i=1;i<=t;i++)
    {
        fin>>n;
        int j=1;
        nrdiv=1;
        sumdiv=1;
        while (prime[j]*prime[j]<=n)
        {
            cop=n;
            expo=0;
            while (n%prime[j]==0)
            {
                expo++;
                n/=prime[j];
            }
            nrdiv*=(expo+1);
            sumdiv*=(cop/n*prime[j]-1)/(prime[j]-1)%9973;
            j++;
        }
        if (n!=1)
        {
            nrdiv*=2;
            sumdiv*=(n*n-1);
            sumdiv/=(n-1);
            sumdiv%=9973;
        }
        fout<<nrdiv<<" "<<sumdiv<<endl;
    }
    return 0;
}