Cod sursa(job #482284)

Utilizator Bogdan_tmmTirca Bogdan Bogdan_tmm Data 2 septembrie 2010 22:45:35
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include<algorithm>
#include<bitset>
using namespace std;
#define MOD 9973
#define MIL 1000005
#define MILL 1LL*1000000000005
#define ll long long
bitset<MIL> ok;
int prim[79000],nrPrime;

void ciur()
{
	ll i,j;
	for(i=3,prim[nrPrime=1]=2;i<MIL;i+=2)
	{
		if(ok[i])
			continue;
		for(j=i*i;j<MIL;j+=i)
			ok[j]=1;
		prim[++nrPrime]=i;
	}
}

int main()
{
	freopen("ssnd.in","r",stdin);
	freopen("ssnd.out","w",stdout);

	ciur();

	int t;
	scanf("%d",&t);
	for(int i=1;i<=t;i++)
	{
		ll n;
		scanf("%lld",&n);
		int nd=1,sd=1;
		int p;
		for(int j=1;1LL*prim[j]*prim[j]<=n;j++)
		{
			if(n%prim[j])
				continue;
			ll s1=1,s=1;
			for(p=1;n%prim[j]==0;n/=prim[j],p++)
			{
				s1=1LL*s1*prim[j];
				s=(s+s1)%MOD;
			}
			nd=nd*p;
			sd=(1LL*sd*s)%MOD;
		}
		if(n!=1)
		{
			nd=nd*2;
			sd=(1LL*sd*(n+1))%MOD;
		}
		printf("%d %d\n",nd,sd);
	}
	return 0;
}