Cod sursa(job #639461)

Utilizator vlcmodanModan Valentin vlcmodan Data 23 noiembrie 2011 12:11:15
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include<stdio.h>
#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;
	freopen("ssnd.in","r",stdin);
	freopen("ssnd.out","w",stdout);
	scanf("%d",&n);
	scanf("%d",&d[1]);
	max=d[1];
	for(i=2;i<=n;i++)
		{
			scanf("%d",&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);
			}
				
		printf("%d ",nr);
		printf("%d\n",s);
		}
		
				
	return 0;}