Cod sursa(job #1427044)

Utilizator cautionPopescu Teodor caution Data 1 mai 2015 13:36:49
Problema Suma si numarul divizorilor Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
#include <vector>
#define MOD 9973
#define MAX_SQRT 1000000
using namespace std;
vector<int> primes;
int is_prime_table[MAX_SQRT];
void buildPrimes()
{
    for(int i=3; i*i<MAX_SQRT; i+=2)
        if(is_prime_table[i]==0)
            for(int j=i*i; j<MAX_SQRT; j+=2*i)
                is_prime_table[j]=1;
    primes.push_back(2);
    for(int i=3; i<MAX_SQRT; i+=2)
        if(is_prime_table[i]==0) primes.push_back(i);
}
int main()
{
    int t, n, s, d, j, c1, c2, c;
    ifstream in("ssnd.in");
    ofstream out("ssnd.out");
    in>>t;
    buildPrimes();
    for(int i=0; i<t; ++i)
    {
        in>>n;
        s=1; d=1; j=0;
        while(n!=1)
        {
            if(n%primes[j]==0)
            {
                c1=1; c2=1;
                c=1;
                while(n%primes[j]==0)
                {
                    ++c1;
                    c*=primes[j];
                    c2+=c;
                    n/=primes[j];
                }
                d*=c1;
                s=s*c2%MOD;
            }
            ++j;
        }
        out<<d<<' '<<s<<'\n';
    }
    return 0;
}