Cod sursa(job #1765900)

Utilizator GabiTulbaGabi Tulba-Lecu GabiTulba Data 27 septembrie 2016 09:30:50
Problema Descompuneri Scor 12
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#define MaxD 10000
using namespace std;
 
long long N,D[MaxD],K;
int mat[MaxD][MaxD],d;
int F(int &X,int div1,int div2)
{
	while(D[X]<D[div1]/D[div2])
		X++;
	if(D[X]>D[div1]/D[div2])X--;
	return X;
}
int main()
{
    freopen("desc.in","r",stdin);
    freopen("desc.out","w",stdout);
     
	scanf("%d%d",&N,&K);
	for(int i=2;i*i<=N;i++)
		if(N%i==0)D[++d]=i,D[++d]=N/i;
	if(D[d]==D[d-1])d--;
	D[++d]=N;
	sort(D+1,D+1+d);
	for(int i=1;i<=d;i++)
		mat[0][i]=1;
	for(int i=1;i<=d;i++)
	{
		int X=0;
		for(int j=d;j>0;j--)
		{
			mat[i][j]=mat[i][j+1];
			if(D[i]%D[j]==0)
				mat[i][j]+=mat[F(X,i,j)][j];
		}
	}
	printf("%d \n",mat[d][1]);
    return 0;
}