Cod sursa(job #179232)

Utilizator hadesgamesTache Alexandru hadesgames Data 15 aprilie 2008 19:18:10
Problema Divizori Primi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <stdio.h>
int nr,x[50005],a[10005];
void ciur(int n)
{
	int p[50005]={0};
	int i,j;
	p[1]=1;
	for (i=2;i<=n&&i*i<=n;i++)
		if (!p[i])
		{
			nr++;
			x[nr]=i;
			p[i]=1;
			for (j=i*i;j<=n;j+=i)
				p[j]=1;
		}
	
}
int main()
{
	//ciur(50000);
	FILE *in,*out;
	int i,p,u,p2,u2,n,j;                                                                       
	in=fopen("divizori.in","r");
	out=fopen("divizori.out","w");
	fscanf(in,"%d",&n);
	u=1;
	p=1;
	a[1]=1;
	for (i=1;i<=nr&&n!=1;i++)
	{
		p=1;
		while (!(n%x[i])&&n)
		{
			p2=u+1;
			u2=u;
			for (j=u;j>=p;j--)
			{
			//	fprintf(out,"%d ",a[j]*x[i]);
				u2++;
				a[u2]=a[j]*x[i];
			}
			p=p2;
			u=u2;
			n/=x[i];
		}
		
	}
	if (n!=1)
	{
			u2=u;
			for (j=u;j>=p;j--)
			{
				//fprintf(out,"%d ",a[j]*n);
				u2++;
				a[u2]=a[j]*n;
			}
			u=u2;
	}
	fprintf(out,"%d\n",u);
	for (i=1;i<=u;i++)
		fprintf(out,"%d ",a[i]);
	fclose(in);
	fclose(out);
	return 0;
}