Cod sursa(job #1943516)

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

using namespace std;
bitset <10000010> ciur;
unsigned int prime[1000000];
int k = 0;
void ciurf (int n)
{
    ciur.reset();

    int i, j;

    ciur [1] = 1;
    for(i=2;i<=2e6;i++)
        if(ciur[i]==0)
        {
            prime[k]=i;
            ++k;
            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=0;prime[i]<=n, i<k;++i)
            if(n%prime[i]==0)
            {
                putere = 0;
                partsum = 1; partprod = 1;
                while(n%prime[i]==0)
                {
                    ++putere;
                    partprod*=prime[i];
                    partprod%=9973;

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

                    n/=prime[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";
    }

}