Pagini recente » Cod sursa (job #2887797) | Cod sursa (job #2687717) | Cod sursa (job #2309159) | Cod sursa (job #94737) | Cod sursa (job #21225)
Cod sursa(job #21225)
#include <stdio.h>
#include <math.h>
#include <vector>
#include <algorithm>
#include <string.h>
#define NMAX 4020
using namespace std;
long long A[NMAX][NMAX], N, Sol[NMAX];
int K, M;
vector<long long> D;
int cb(long long x)
{
int lo, hi, mid;
for (lo = 0, hi = M, mid = (lo+hi)/2; lo <= hi; mid = (lo+hi)/2)
{
if (x == D[mid]) return mid;
if (x < D[mid]) hi = mid-1;
else lo = mid+1;
}
return -1;
}
int main()
{
int i, j, rad, p, nsol = 0, t;
long long ii;
freopen("desc.in", "r", stdin);
scanf("%lld %d", &N, &K);
D.clear();
memset(A, 0, sizeof(A));
D.push_back(1);
for (ii = 2; ii*ii <= N; ii++)
if (N%ii == 0) {D.push_back(ii);
if (N/ii != i) D.push_back(N/ii); }
D.push_back(N);
sort(D.begin(), D.end());
M = D.size();
for (i = 0; i < M; i++) A[0][i] = 1;
for (i = 1; i < M; i++)
{
for (j = i; j > 0; j--)
{
A[i][j] = A[i][j+1];
p = -1;
if (D[i]%D[j] == 0)
p = cb(D[i]/D[j]);
if (p >= 0) A[i][j] += A[p][j];
}
}
freopen("desc.out", "w", stdout);
printf("%d\n", A[M-1][1]);
return 0;
}