Cod sursa(job #646164)

Utilizator xman2f4uIulia Ignatov xman2f4u Data 10 decembrie 2011 23:47:01
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <fstream>
#include <bitset>


using namespace std;



int prim[664579];



void init()
{
    bitset<10000001> ciur;
    
    int i, j;
    int count;
    
    ciur.reset();
    
    for (i = 2; i < 5000000; ++i)
    {
        for (j = i+i; j < 10000001; j += i)
        {
            ciur.set(j);
        }
    }
    
    count = 0;
    for (i = 2; i < 10000001; ++i)
    {
        if (0 == ciur[i])
        {
            prim[count] = i;
            ++count;
        }
    }
}



int main()
{
    ifstream fin("ssnd.in", istream::in);
    ofstream fout("ssnd.out");
    
    int t;
    int n;
    int i;
    int p;
    int nrdiv;
    int d;
    int sum;
    long long power;
    int ipow;
    
    init();
    
    fin >> t;
    while (0 < t)
    {
        fin >> n;
        p = 0;
        nrdiv = 1;
        sum = 1;
        while (1 < n)
        {
            d = 0;
            while (0 == n % prim[p])
            {
                n /= prim[p];
                ++d;
            }
            nrdiv *= d+1;
            power = 1;
            for (ipow = 1; ipow <= d+1; ++ipow)
            {
                power *= prim[p];
            }
            sum *= ((power - 1) / (prim[p]-1)) % 9973; 
            ++p;
        }
        fout << nrdiv << " " << sum << "\n";
        --t;
    }
    
    return 0;
}