Cod sursa(job #635206)

Utilizator a_h1926Heidelbacher Andrei a_h1926 Data 18 noiembrie 2011 19:21:40
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
using namespace std;
const int MOD = 9973;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
int N=1000005, cnt=0;
//char prim[1000005];
int p[1000005];

const int NMAX = 1 << 17;
unsigned char V[NMAX];

int main()
{
	int t,i,j,i2,nr,e,f;
	long long n,fact,m,s;
	p[++cnt]=2;
	for (i = 3; i <= N; i += 2) {
        if (V[i >> 4] & (1 << ((i >> 1) & 7))) continue;
        p[++cnt]=i;

        for (j = i + (i2 = i + i); j <= N; j += i2)
            V[j >> 4] |= 1 << ((j >> 1) & 7);
	}
	fin>>t;
	for(i=1;i<=t;i++)
	{
		fin>>n;m=n;
		f=1;  nr=1;s=1;
		while(n!=1&&f<=cnt&&p[f]*p[f]<=n)
			{m=n;
			if(n%p[f]==0)
				{
				e=0;fact=p[f];
				while(n%(1LL*p[f])==0)
					{
					n=n/(1LL*p[f]);
					e++;
					//fact=(fact*(1LL*p[f]));
					}

				s=s*(p[f]*m/n-1)/(1LL*p[f]-1);
				s=s%MOD;
				nr=nr*(e+1);
				}
			f++;
			}

		if(n!=1)
		{
			nr=nr*2;
			s=(s*(n+1));
			s=s%MOD;
			}
		fout<<nr<<" "<<s%MOD<<"\n";
	}
}