Cod sursa(job #639463)

Utilizator vlcmodanModan Valentin vlcmodan Data 23 noiembrie 2011 12:13:44
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include<fstream>
#include<math.h>
using namespace std;

int main()
{
	int a[50000],i,j,b[50000],d[1001],n,a1[50000],max,u,k;
int s,nr,in;
	ifstream f("ssnd.in");
	ofstream g("ssnd.out");
	f>>n;
	f>>d[1];
	max=d[1];
	for(i=2;i<=n;i++)
		{
			f>>d[i];
			if(d[i]>max)
				max=d[i];
		}
	a[1]=2;
	u=1;
	b[2]=2;
	max=sqrt(max);
	for(i=2;i<=max;i++)
		b[i]=i*2-1;
	for(i=2;i<=max;i++)
		if(b[i]!=0)
		{
			a[++u]=b[i];
			for(j=i+b[i];j<=max;j+=b[i])
			{
				b[j]=0;
			}
		}
		
		for(i=1;i<=n;i++)
		{
			s=1;
			nr=1;
			for(j=1;j<=sqrt(d[i]);j++)
			{
				if(d[i]%a[j]==0)
				{
					in=0;
					k=d[i];
					do
					{
						k/=a[j];
						in++;
					}
					while(k%a[j]==0);
					s=s*((pow(a[j],in+1)-1)/(a[j]-1));
					nr*=(in+1);
					
					
				}
			}
			if(s==1&&nr==1)
			{
				nr=2;
				s=(d[i]*d[i]-1)/(d[i]-1);
			}
				
		g<<nr<<" "<<s<<"\n";
		
		}
		
				
	return 0;}