Cod sursa(job #968021)

Utilizator mircea.dobreanuMircea Dobreanu mircea.dobreanu Data 29 iunie 2013 16:07:35
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include<fstream>
using namespace std;
const int MAXN=1000001;

bool p[MAXN];
int prim[78498];
int k,t,n,cn,i,put,nrprim;
long long suma,card;

ifstream fin("ssnd.in");
ofstream fout("ssnd.out");

int main()
{
	for (int i=2;i<MAXN;++i)
	{
		if (!p[i])
		{
			prim[nrprim++]=i;
			for (int j=i+i;j<MAXN;j+=i)
				p[j]=true;
		}
	}
	fin>>t;
	for (k=1;k<=t;++k)
	{
		fin>>n;
		cn=n;
		suma=card=1;
		for (i=0;i<78499 && prim[i]<=cn && cn!=1;++i)
		{
			put=0;
			if (cn%prim[i]==0)
			{
				while (cn%prim[i]==0)
				{
					++put;
					cn/=prim[i];
				}
			}
			card=(card*(put+1))%9973;
			suma=(suma*(((int)pow(prim[i],put+1)-1)/(prim[i]-1)))%9973;
		}
		fout<<card<<' '<<suma<<'\n';
	}
	fin.close();
	fout.close();
	return 0;
}