Cod sursa(job #1224632)

Utilizator lakatosandreiLakatos Andrei lakatosandrei Data 31 august 2014 15:26:10
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>
#include <cmath>
#include <iostream>
#define SIZE 1000001

using namespace std ;

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

char	p[SIZE];

void		calcul()
{
	int i, j;

	for (i = 2; i <= sqrt(SIZE); i++)
		if (p[i] == 0)
			for (j = i; j <= SIZE/i; j++)
				p[i * j] = 1;
}

long long	get_nr_sum(long long n)
{
	long long i, nr, t, s, q;

	t = 0;
	s = nr = i = q = 1;
	i = 2;
	while (n > 1)
	{
		if (!p[i])
		{
			if (n % i == 0)
			{
				t++;
				q *= i;
				n /= i;
			}
			else
			{
				nr *= (t + 1);
				q *= i;
				s *= (q - 1) / (i - 1);
				t = 0;
				q = 1;
				i++;
			}
		}
		else
		{
			i++;
			t = 0;
			q = 1;
		}
		if (n == 1)
		{
			nr *= (t + 1);
			q *= i;
			s *= (q - 1) / (i - 1);
		}
	}
	g << nr << ' ';
	return (s);
}

void	print_nr_sum()
{
	int n;
	long long aux;

	f >> n;
	for (int i = 1;i <= n; i++)
	{
		f >> aux;
		g << get_nr_sum(aux) << '\n';
	}
}

int	main()
{
	calcul();
	print_nr_sum();
	return 0 ;
}