Cod sursa(job #385796)

Utilizator AndreyPAndrei Poenaru AndreyP Data 23 ianuarie 2010 15:12:57
Problema Descompuneri Scor 8
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include<stdio.h>
#include<algorithm>
using namespace std;
#define N 1100
int n,k;
int d[N];
int a[N][N];
int rez[N];
inline int next(int i,int j)
{
	for(; d[i]%d[j]!=0; ++j)
		;
	return j;
}
int main()
{
	freopen("desc.in","r",stdin);
	freopen("desc.out","w",stdout);
	scanf("%d%d",&n,&k);
	d[0]=1;
	d[1]=n;
	int i;
	for(i=2; i*i<n; ++i)
	{
		if(n%i==0)
		{
			d[++d[0]]=i;
			d[++d[0]]=n/i;
		}
	}
	if(n%i==0)
		d[++d[0]]=i;
	sort(d+1,d+d[0]+1);

	int t,x;
	for(i=1; i<=d[0]; ++i)
	{
		a[i][d[0]+1]=0;
		t=1;
		for(int j=d[0]; j!=0; --j)
		{
                	a[i][j]=a[i][j+1];
			if(d[i]%d[j]==0)
			{
				x=d[i]/d[j];
				if(x==1)
					++a[i][j];
				else
				{
					for(; d[t]!=x && t<d[0]; ++t)
						;
					a[i][j]+=a[t][j];
				}
			}
		}
	}
	printf("%d\n",a[d[0]][1]);
	return 0;


	int j;
	i=d[0];
	j=1;
	t=1;
	int cat;
        while(k!=0)
	{
		j=next(i,j);
		if(i==j)
		{
			rez[++rez[0]]=d[i];
			k=0;
			continue;
		}
                t=next(i,j+1);
		cat=a[i][j];
		while(k>cat-a[i][t])
		{
			k-=cat-a[i][t];
			cat=a[i][t];
			j=t;
			t=next(i,j+1);
		}
		rez[++rez[0]]=d[j];
		x=d[i]/d[j];
		for(; d[i]!=x; --i)
			;
	}
	for(i=1; i<rez[0]; ++i)
		printf("%d ",rez[i]);
	printf("%d\n",rez[rez[0]]);
	return 0;
}