Cod sursa(job #2230445)

Utilizator nicolaefilatNicolae Filat nicolaefilat Data 10 august 2018 10:42:50
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <iostream>
#include <fstream>
#include <bitset>
#include <vector>
#define MOD 9973
#define MAXN 1000001

using namespace std;

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

typedef long long ll;
ll divizori,suma,cnt;
bitset<MAXN>prim;
vector<int>el;

void buildCiur(){
    for(int i = 2; i < MAXN; i++){
        if(prim[i])
            continue;
        el.push_back(i);
        for(int j = i + i; j < MAXN; j +=i)
            prim[j] = 1;
    }
}

void rez(ll n){

    long long suma = 1;
    int divizori = 1;
    for(auto x: el){
        if(1LL*x*x>n)
            break;
        long long putere = 1;
        int exponent = 0;
        while(n % x ==0){
            n /= x;
            putere *= x;
            exponent++;
        }
        divizori *= (exponent+1);
        suma *= (putere*x-1) /( x-1);
    }
    if(n > 1){
        divizori *= 2;
        suma *= (n+1);
    }
}


int main()
{
    ciur();
    ll t;
    in>>t;

    for(ll i = 0; i < t; i++){
        ll nr;
        in>>nr;
        rez(nr);
        out<<divizori<<" "<<suma % MOD<<"\n";
    }
    return 0;
}