Cod sursa(job #1980059)

Utilizator trifangrobertRobert Trifan trifangrobert Data 12 mai 2017 01:37:27
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>
#include <cmath>

using namespace std;

ifstream f("ssnd.in");
ofstream g("ssnd.out");
int t, n;
bool ciur[1000001];

void Ciur()
{
	ciur[0] = ciur[1] = true;
	int k;
	for(int i=2;i<=1000001;i++)
		if (ciur[i] == false)
		{
			k = 2;
			while (k*i <= 1000001)
			{
				ciur[k*i] = true;
				k++;
			}
		}
}

int Card(int n)
{
	int r = sqrt(n),i,k,nrdiv=1,cn;
	for (i = 2;i <= r;i++)
	{
		if (!ciur[i] && n % i == 0)
		{
			cn = n;
			k = 0;
			while (cn % i == 0)
			{
				k++;
				cn /= i;
			}
			nrdiv *= k+1;
		}
	}
	if (nrdiv == 1)
		return 2;
	return nrdiv;
}

int Sum(int n)
{
	int r = sqrt(n), i, k, sum = 1, cn;
	for (i = 2;i <= r;i++)
	{
		if (!ciur[i] && n % i == 0)
		{
			cn = n;
			k = 0;
			while (cn % i == 0)
			{
				k++;
				cn /= i;
			}
			sum = sum *(pow(i, k+1) - 1) / (i - 1);
		}
	}
	if (sum == 1)
		return n + 1;
	return sum;
}

int main()
{
	Ciur();
	f >> t;
	for (int i = 1;i <= t;i++)
	{
		f >> n;
		g << Card(n) << " ";
		g << Sum(n) << "\n";
	}
	return 0;
}