Cod sursa(job #639058)

Utilizator hainagiudanielHainagiu Daniel hainagiudaniel Data 22 noiembrie 2011 11:33:48
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include<fstream>
#include<cmath>
using namespace std;
int main()
{
	int n,i,p=1,m=2,a=0,j;
	long long x,xx,s=1,b=1;
	char prim[1000005]={0};
	ifstream f("ssnd.in");
	ofstream g("ssnd.out");
	f>>n;prim[2]=1;
	for (i = 3; i <=1000000; i+=2)
		prim[i]=1;
	for (i = 3; i <=1000000; i+=2)
		if(prim[i])
			for (j = i+i; j <= 100000; j += i) 
				prim[j] = 0;       
	for(i=1;i<=n;i++)
	{
		f>>x;
		xx=x;
		while(x!=1&&m<=sqrt((float)xx))
		{	
			if(prim[m])
			{
				while(x%m==0)
			{
				a++;
				x=x/m;
			}
			p=p*(a+1);
			do{
				b=b*m;
				a--;
			}while(a>=0);
			s=s*(b-1)/(m-1);
			b=1;a=0;
			if(m==2)
				m++;
			else
			m+=2;
			}
			else
				if(m==2)
				m++;
				else
				m+=2;
		}
		if(x!=1)
		{	p=p*2;
			s=s*(x*x-1)/(x-1);
		}
		m=2;
		s=s%9973;
		g<<p<<" "<<s<<'\n';
		s=1;p=1;
	}
	return 0;
}