Cod sursa(job #700117)

Utilizator mlupseLupse-Turpan Mircea mlupse Data 29 februarie 2012 23:52:30
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
using namespace std;
#include<cstdio>
#include<bitset>
#define MAX 1000005
#define MAX2 78600
#define MOD 9973
bitset <MAX> ciur;
int prim[MAX2];
void ciur_er()
{
	int i,j,k=1;
	prim[k]=2;
	for(i=3;i<MAX-1;i=i+2)
		if(!ciur[i])
		{
			prim[++k]=i;
			for(j=i+i+i;j<MAX-1;j=j+i+i)
				ciur[j]=1;
		}
}
int main()
{
	freopen("ssnd.in","r",stdin);
	freopen("ssnd.out","w",stdout);
	long long T,n,c,nrd,i,m,S,P;
	ciur_er();
	scanf("%lld",&T);
	while(T--)
	{
		scanf("%lld",&n);
		nrd=1;
		S=1;
		for(i=1;prim[i]*prim[i]<=n;i++)
		{
			m=n;
			c=1;
			while(n%prim[i]==0)
			{
				n=n/prim[i];
				c++;
			}
			nrd=nrd*c;
			P=(m/n*prim[i]-1)/(prim[i]-1);
			S=((S%MOD)*(P%MOD))%MOD;
			//S=S*P;
		}
		if(n!=1)
		{
			nrd=nrd*2;
			S=((S%MOD)*((n+1)%MOD))%MOD;
			//S=S*(n+1);
		}
		printf("%lld %lld\n",nrd,S);
	}
	return 0;
}