Cod sursa(job #495143)

Utilizator ChallengeMurtaza Alexandru Challenge Data 24 octombrie 2010 09:14:54
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>

using namespace std;

const char InFile[]="ssnd.in";
const char OutFile[]="ssnd.out";
const int MaxN=1000100;
const int MOD=9973;

ifstream fin(InFile);
ofstream fout(OutFile);

int nrd,t;
long long n,sum;
char pciur[MaxN];
int nrp[MaxN];

inline void ciur()
{
	for(register int i=2;i<MaxN;++i)
	{
		if(pciur[i]==0)
		{
			nrp[++nrp[0]]=i;
			for(register int j=i<<1;j<=MaxN;j+=i)
			{
				pciur[j]=1;
			}
		}
	}
}

int main()
{
	ciur();
	fin>>t;
	for(register int i=0;i<t;++i)
	{
		fin>>n;
		nrd=1;
		sum=1;
		for(register int j=1;(long long)(nrp[j])*(long long)(nrp[j])<=n;++j)
		{
			int p=1;
			long long k=nrp[j];
			while(n%nrp[j]==0)
			{
				++p;
				k*=nrp[j];
				n/=nrp[j];
			}
			nrd*=p;
			sum*=(k-1)/((long long)nrp[j]-1);
			sum%=MOD;
		}
		if(n>1)
		{
			nrd<<=1;
			n%=MOD;
			sum*=(n*n-1)/(n-1);
			sum%=MOD;
		}
		fout<<nrd<<" "<<sum<<"\n";
	}
	fout.close();
	fin.close();
	return 0;
}