Cod sursa(job #481083)

Utilizator marius21Marius Petcu marius21 Data 30 august 2010 15:17:24
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <cstdio>
#include <cstdlib>
#include <stdint.h>
#include <string>
#include <math.h>

#define MODNR 9973

FILE *fin=fopen("ssnd.in","r");
FILE *fout=fopen("ssnd.out","w");

uint8_t bif[1000000];
int a[300000];

void ciur(int n)
{
	memset(bif,1,n);
	int nrprimes=0;
	for (int i=2; i<n; i++)
	{
		if (!bif[i]) continue;
		a[nrprimes++]=i;
		for (int j=i*2; j<n; j+=i)
			bif[j]=0;
	}
	a[nrprimes]=-1;
}

int put(int a, int b)
{
	int p=1;
	for (int i=(sizeof(int)*8-2); i>=0; i--)
	{
		p=p*p;
		if (b&(1<<i))
			p*=a;
	}
	return p;
}

int main (int argc, char * const argv[]) {
	
	int t;
	fscanf(fin, "%d", &t);
//	ciur(1000001);
    for (int i=0; i<t; i++)
	{
		long long n;
		long long s=1,nr=1;
		fscanf(fin, "%lld", &n);
		//int np=0;
//		int p=a[np];
		int p=2;
		while (p<=sqrt(n))
		{
			if (p==-1)
				return -1;
			long long put=p;
			int f=0;
			while (!(n%p))
			{
				f++;
				n/=p;
				put*=p;
				//put%=MODNR;
			}
			nr*=f+1;
			nr%=MODNR;
			s=(s*((put-1)/(p-1)))%MODNR;
			
	//		np++;
	//		p=a[np];
			p++;
		}
		if (n!=1)
		{
			s=(s*((n*n-1)/(n-1)))%MODNR;
			nr=(nr<<1)%MODNR;
		}
		fprintf(fout, "%lld %lld\n",nr,s);
	}
	fclose(fin);
	fclose(fout);
    return 0;
}