Cod sursa(job #2609816)

Utilizator bindeacristianBindea Cristian bindeacristian Data 3 mai 2020 16:27:52
Problema Suma si numarul divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <iostream>
#include <fstream>
#include <cmath>
#include <bitset>
using namespace std;

ifstream fin("ssnd.in");
ofstream fout("ssnd.out");

const int MAX_N = 1000005;
const int MOD = 9973;

bitset<MAX_N>ciur;

void Ciur()
{
    int i,j;

    for(i=1; i<MAX_N; i++)
        ciur[i]=1;
    for(i=2; i<MAX_N; i++)
    {
        if(ciur[i]==1)
            for(j=i+i; j<=MAX_N; j=j+i)
                ciur[j]=0;
    }
}

void Rezolvare(int n)
{
    long sumdiv=1, nrdiv=1;
    if(ciur[n]==1)
    {
        nrdiv=2;
        sumdiv=n+1;
    }
    else
        for(long unsigned int i=2; i<=n; i++)
            if(n%i==0 && ciur[i]==1)
            {
                int P=0;
                while(n%i==0)
                {
                    n=n/i;
                    P++;
                }

                nrdiv=nrdiv*(P+1);
                sumdiv=sumdiv*(pow(i,P+1)-1)/(i-1);
            }


    fout<<nrdiv<<" "<<sumdiv<<endl;

}
int main()
{
    Ciur();

    long unsigned int x;
    long sumdiv=1, nrdiv=1;
    int n;
    fin>>n;
    for(int i=1; i<=n; i++)
    {
        fin>>x;
        Rezolvare(x);
    }


    return 0;
}