Cod sursa(job #645815)

Utilizator okros_alexandruOkros Alexandru okros_alexandru Data 10 decembrie 2011 15:49:51
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include<fstream>
#define MOD 9973
#define NMAX 1000000
using namespace std;
int prim[NMAX+1000],n;

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

void rez(long long x) {
	int i,j,k,div=1;
	long long sum=1;
	for(i=1;1LL*i*i<=x;i++)
		if((x%i==0)&&(!prim[i])) {
			k=1;
			j=i;
			while(x%i==0) {
				k++;
				x/=i;
				j*=i;
				}
			div*=k;
			sum*=(j-1)/(i-1)%MOD;
			}
	if(x>1) {
		div*=2;
		sum*=(x*x-1)/(x-1)%MOD;
		}
	out<<div<<' '<<sum%MOD<<'\n';
}
void ciur() {
	int i,j;
	prim[1]=1;
	for(i=4;i<=NMAX;i+=2)
		prim[i]=1;
	for(i=3;i<=NMAX;i+=2)
		if(!prim[i])
			for(j=3*i;j<=NMAX;j+=(i<<1))
				prim[j]=1;
}
int main() {
	int i;
	long long x;
	ciur();
	in>>n;
	for(i=0;i<n;i++) {
		in>>x;
		rez(x);
		}
	in.close();
	out.close();
	return 0;
}