Cod sursa(job #446489)

Utilizator andunhillMacarescu Sebastian andunhill Data 25 aprilie 2010 23:28:13
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include<fstream>
#include<math.h>
#include<bitset>
using namespace std;
#define p 9973
#define cmax 1000000
#define pmax 1000000
fstream f("ssnd.in");
ofstream g("ssnd.out");
bitset <cmax+5> v;
int t;
long long prime[pmax+1];
long long d,x; long long n,sum,nr;
void ciur()
{ for(long i=2;i<=cmax/2;i++)
  {	if(v[i]==0)
	{	prime[d]=i;
		for(long j=2*i;j<=cmax;j+=i)
			v[j]=1;
	}
	d++;
  }
}
void desc(int r)
{	long long q=0,z=0;
    sum=1; nr=1;
	while(r!=1)
	{	if(r%prime[x]==0)
		{	while(r%prime[x]==0)
			{	q++;
				r/=prime[x];
			}
			nr*=(q+1);
			z=powl(prime[x],q+1);
			sum*=((z-1)/(prime[x]-1));
			sum%=p; 
		}
		q=0;
		x++;
	}
}
void solve()
{	f>>n;
    d=0; x=0;
	desc(n);
    g<<nr<<" "<<sum<<'\n';
}
int main()
{ f>>t;
  ciur();
  for(int i=1;i<=t;i++)
	solve();
  f.close();
  g.close();
  return 0;
}