Cod sursa(job #2460217)

Utilizator davidcotigacotiga david davidcotiga Data 23 septembrie 2019 09:20:51
Problema Suma si numarul divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <fstream>
#include <cmath>

using namespace std;

const int maxCiur = 100;
const int maxPrime = 25;

bool ciur[maxCiur];
int prime[maxPrime];

ifstream cin("ssnd.in");
ofstream cout("ssnd.out");
//generam ciurul

void prelucrareCiur(){
    ciur[0] = 1;
    ciur[1] = 1;
    int i;
    for (i = 2; i <= sqrt(maxCiur); ++i)
        if (!ciur[i])
            for (int j = i; j * i < maxCiur; ++j)
                ciur[i * j] = 1;
    int k = 0;
    for (int i = 0; i < maxCiur && k < maxPrime; ++i)
            if (!ciur[i]){
                prime[k] = i;
                ++k;
            }
}

//aflam nr de divizori si suma acestora

void divizori(long n, int &rez, float &suma) {
	int p;
	for (int d = 0; prime[d] != 0 && n > 1; ++d) {
		p = 0;
		while (n % prime[d] == 0) {
			++p;
			n /= prime[d];
		}
		if (p){
			rez *= p + 1;
			suma *= (pow(prime[d], p + 1) - 1) / (prime[d] - 1);
		}
	}
}

int main(){
    prelucrareCiur();
    int t;
    long n;
    cin >> t;
    for (int i = 0; i < n; ++i){
        cin >> n;
        float suma = 1;
        int rez = 1;
        divizori(n, rez, suma);
        cout << rez << " " << suma << "\n";
    }



    return 0;
}