Cod sursa(job #1605360)

Utilizator adu18sptAndrei Mircea adu18spt Data 18 februarie 2016 22:35:01
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<fstream>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
bool ciur[1000005];
unsigned nrprime[79000];
unsigned i,j,m;
unsigned long long sumdiv,nrdiv,n,a,k,p;
void ciur_v()
{
	 for(i=2;i<=1000000;i++)
	 {
	 	if(ciur[i]!=1)
	 	{
	 		nrprime[m]=i;
	 		m++;
	 		for(j=i*i;j<=1000000;j+=i)
	 		{
	 		ciur[i]=1;	
			 }
		 }
	 }
}
int main()
{
	ciur_v();
	fin>>n;
	j=0;
	for(i=1;i<=n;i++)
	{
		fin>>a;
		sumdiv=1;
		nrdiv=1;
		while(nrprime[j]*nrprime[j]<=a)
		{
			k=0;
			p=nrprime[j];
			while(a%nrprime[j]==0)
			{
				a/=nrprime[j];
				k++;
				p*=nrprime[j];
			}
			if(p)
			{
				nrdiv*=(k+1)%9973;
				sumdiv*=((p-1)/(nrprime[j]-1))%9973;
			}
			j++;
		}
		if(a!=1)
		{
			nrdiv*=2%9973;
			sumdiv*=(a+1)%9973;
		}
		fout<<nrdiv<<" "<<sumdiv<<"\n";
	}
	return 0;
}