Cod sursa(job #1981174)

Utilizator trifangrobertRobert Trifan trifangrobert Data 15 mai 2017 01:31:13
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>
#include <cmath>

using namespace std;

ifstream f("ssnd.in");
ofstream g("ssnd.out");
int t;
long long n;

int lgput(int base, int exp)
{
	int rez = 1;
	while (exp)
	{
		if (exp % 2)
		{
			rez *= base;
			exp--;
		}
		base *= base;
		exp /= 2;
	}
	return rez;
}

int Card(int n)
{
	int r = sqrt(n),i,k,nrdiv=1,cn;
	for (i = 2;i <= r;i++)
	{
		if (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 ( n % i == 0)
		{
			cn = n;
			k = 0;
			while (cn % i == 0)
			{
				k++;
				cn /= i;
			}
			sum = sum *(lgput(i, k+1) - 1) / (i - 1);
		}
	}
	if (sum == 1)
		return n + 1;
	return sum;
}

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