Cod sursa(job #2047781)

Utilizator RaresEGaySopterean Adrian RaresEGay Data 25 octombrie 2017 11:38:52
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.45 kb
#include <fstream>
#include <iostream>
#include <math.h>
#include <vector>

using namespace std;

const int mod = 9973;
const int maxn = 1000000;

unsigned long long n;
int t;
bool prime[maxn];
vector < int > v;

ifstream f("ssnd.in");
ofstream g("ssnd.out");

int main(){

    for(int i = 2; i < maxn; ++i){
        if(!prime[i]){
            v.push_back(i);
            for(int j = 2 * i; j < maxn; j += i) prime[j] = 1;
        }
    }

    f >> t;
    while(t){
        --t; int div = 1, p = 1;
        f >> n;
        for(int i = 0; v[i] * v[i] <= n; ++i){
            int k = v[i], power = 0, sum = 1;
            if(n % k == 0){
                while(n % k == 0){
                    n /= k;
                    power++;
                }
                div *= (power + 1);
                for(int l = 1; l <= power; ++l){
                    int a = k, sol = 1;
                    for(int j = 0; (1<<j) <= l; ++j){
                        if((1<<j) & l) sol = ((sol % mod) * (a % mod)) % mod;
                        a = ((a % mod) * (a % mod)) % mod;
                    }
                    sum = ((sum % mod) + (sol % mod)) % mod;
                }
                p = ((p % mod) * (sum % mod)) % mod;
            }

        }

        if(n > 1){
            n += 1;
            n = n % mod;
            div = (div * 2) % mod;
            p = (p * n) % mod;
        }
        g << div << ' ' << p << '\n';
    }
}