Cod sursa(job #799523)

Utilizator enedumitruene dumitru enedumitru Data 19 octombrie 2012 10:47:20
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>
#define LL long long
#define MOD 9973
using namespace std;
int t;
ifstream f("ssnd.in"); ofstream g("ssnd.out");
int r [80000];
char w [1000001]; //w[i] == 0 if i is prime
inline void ciur() 
{	int i, j, nr=0;
	for (i = 2; i <= 1000000; ++i) 
		if (w[i] == 0) 
		{	r[++nr]=i;
			for (j = i + i; j <= 1000000; j += i) w[j] = 1;
		}	
	}
inline LL calc(LL a, int k)
{ 	LL p=a;
	while(--k) p*=a;
	return p;
}
inline void desc()
{	int i = 1; 
	LL n,nrdiv=1,sum=1;
	f >> n;
	while(r[i]*r[i]<=n)
	{	if(!(n%r[i]))
		{	int d = 0; 
			LL prod=1;
			while(!(n%r[i]))
				{d++; n/=r[i];}
			d++;
			prod = ((calc(r[i],d)-1) / (r[i]-1)) % MOD;
			sum = (sum * prod) % MOD;
			nrdiv = nrdiv * d;
		}
		++i;
	}
	if(n>1) 
		{	nrdiv = nrdiv * 2;
			sum = (sum * (n+1)) % MOD;
		}
	g<<nrdiv<<' '<<sum<<'\n';
}
int main()
{	ciur();
	f >> t;
	while(t--) desc();
	g.close(); return 0;
}