Pagini recente » Cod sursa (job #183839) | Cod sursa (job #2634441) | Cod sursa (job #576745) | Cod sursa (job #182497) | Cod sursa (job #21214)
Cod sursa(job #21214)
#include <stdio.h>
#include <math.h>
#include <vector>
#include <algorithm>
#define NMAX 2020
#define NDIV 20000
using namespace std;
long long A[NMAX][NMAX];
int N, K, M, Sol[NMAX];
vector<int> D;
int cb(int x)
{
int lo, hi, mid;
for (lo = 0, hi = M-1, 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;
freopen("desc.in", "r", stdin);
scanf("%d %d", &N, &K);
rad = (int)sqrt(N);
D.clear();
D.push_back(1);
for (i = 2; i <= rad; i++)
if (N%i == 0) {
D.push_back(i);
if (i != N/i)
D.push_back(N/i);
}
D.push_back(N);
sort(D.begin(), D.end());
M = D.size();
if (M > 2000)
while (1);
for (i = 0; i < M; i++) A[0][i] = 1;
for (i = 1; i < M; i++)
for (j = i; j > 0; j--)
{
if (i == j) {
A[i][j] = 1;
continue;
}
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("%lld\n", A[M-1][1]);
return 0;
}