Cod sursa(job #1943500)

Utilizator Y0da1NUME JMECHER Y0da1 Data 28 martie 2017 17:06:08
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include <iostream>
#include <fstream>
#include <bitset>
#include <math.h>

using namespace std;
bitset <10000010> ciur;

void ciurf (int n)
{
    ciur.reset();

    int i, j;

    ciur [1] = 1;
    for(i=2;i<=2e6;i++)
        if(ciur[i]==0)
            for(j=i+i;j<=2e6;j+=i)
                ciur[j]=1;
}
int main()
{
    ifstream in ("ssnd.in");
    ofstream out ("ssnd.out");

    int t;
    long long int n, nr, n2, sum=0, partsum, partprod;

    int i, putere;
    ciurf(2e6);
    in>>t;
    while(t--)
    {
        in>>n;
        n2=n;
        nr = 1;
        sum=1;
        for(i=2;i*i<=n2;++i)
            if(!ciur[i] && n%i==0)
            {
                putere = 0;
                partsum = 1; partprod = 1;
                while(n%i==0)
                {
                    ++putere;
                    partprod*=i;
                    partprod%=9973;

                    partsum +=partprod;
                    if(partsum > 9973)
                        partsum -= 9973;

                    n/=i;
                }
                sum *= partsum;
                sum %= 9973;

                nr *=(1+putere);
            }
        //testam daca e un nr prim f mare
        if(n>1)
        {
            nr*=2;
            sum=(sum * n+1) % 9973;
        }
        out<<nr<<" "<<sum<<"\n";
    }

}