Cod sursa(job #1025897)

Utilizator danny794Dan Danaila danny794 Data 10 noiembrie 2013 19:17:21
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <fstream>
#include <iostream>
#include <map>

using namespace std;

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

pair<long long, int> getPrimeDecomposition(long long N){
  pair<long long, int> result;
  long long k, sum, p, totalSum = 1;
  int pow, div = 1;
  for (k = 2; k <= N; k++){
    pow = 0;
    sum = 0;
    p = 1;
    while (N % k == 0){
    	N/=k;
    	sum+=p;
    	p*=k;
    	pow++;
    }

    if (pow > 0){
    	sum+=p;
    	div*=(1 + pow);
    	totalSum*=sum;
    }
  }
  result.first = totalSum;
  result.second = div;
  return result;
}

void solve(long long N){
	pair<long long, int> p = getPrimeDecomposition(N);
	g << p.second << " " << p.first % 9973 << "\n";
}

int main() {
	int t;
	long long N;
	f >> t;
	for (int i = 1; i <= t; i++){
		f >> N;
		solve(N);
	}
	f.close();
	g.close();
	return 0;
}