Cod sursa(job #2078603)

Utilizator alina13mAlinaaa alina13m Data 29 noiembrie 2017 19:18:35
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.88 kb
#include <fstream>
#include <math.h>

// suma si numarul divizorilor

std :: ifstream cin("ssnd.in");
std :: ofstream cout ("ssnd.out");

#define NMAX 1000
#define Modulo 9973
int64_t n, a, allNumbers[NMAX], primeNrs[NMAX], count = 1, sum, j, nrPrime, exponent = 1, result, total;
char A[NMAX];

//cout.flush;

void ciur(int64_t n) {

	for(int64_t i = 2; i <= sqrt(n); i++) {
    	if(A[i] == 0){
      		  
      		for(int64_t j = i * i; j <= n; j += i) {
        		A[j] = 1; 
        		
      		}
    	}
	}

  	for(int64_t i = 2; i <= n; i++) {
    	// Check if it was marked as prime number and if yes, store it in the array primeNrs.
    	if(A[i] == 0 && primeNrs[i] != n){  
    		primeNrs[++nrPrime] = i;
    	}
  	}

  	/*
  	for(int64_t i = 1; i <= nrPrime; i++){
  		cout << "check primeNrs[i] = " << primeNrs[i] << "\n";
		cout.flush();
  	}*/

}

void sumaDivizori(int64_t n){

	int64_t divizori = 0, sum = 1, firstItem = 1, imparte = 1, otherItems, partialSum = 1;

	for(int64_t i = 1; i <= nrPrime; i++) {
		
		otherItems = primeNrs[i];

		//cout << "check primeNrs[i] = " << primeNrs[i] << "\n";
		//cout.flush();

		while(n % primeNrs[i] == 0){
			n /= primeNrs[i];
			exponent++;

			//cout << "check n = " << n << "\n"; ///// AICI
			//cout.flush();

			//firstItem = primeNrs[i] + 1;
			//imparte = primeNrs[i];

			partialSum += otherItems; 
			otherItems *= primeNrs[i]; // 2 + 4 + 8  eg n = 8

			cout << "exponent = " << exponent << "\n";


		}

		divizori = exponent;
		

		sum *= partialSum;
		partialSum = 1;
		//sum = (firstItem + otherItems) * (imparte - 1) % Modulo;
	}

	//cout << "check divizori " << divizori << "\n" << "\n";
	//cout.flush();

	cout << divizori << " " << sum << "\n";
	exponent = 1;
	

	//cout << "check divizori " << divizori << "\n" << "\n";
	//cout.flush();


}


int main() {

	
	cin >> total;
	
	while(total--){
		cin >> n;
		ciur(n);
		sumaDivizori(n);
	}

	return 0;
}