Pagini recente » Cod sursa (job #2587736) | Cod sursa (job #2975427) | Cod sursa (job #450534) | Cod sursa (job #446702) | Cod sursa (job #21231)
Cod sursa(job #21231)
#include <stdio.h>
#include <math.h>
#include <vector>
#include <algorithm>
#define NMAX 2600
#define NDIV 20000
using namespace std;
int A[NMAX][NMAX];
long long N;
int K, M, Sol[NMAX];
vector<long long> D;
int cb(long long 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("%lld %d", &N, &K);
rad = (int)sqrt(N);
//fprintf(stderr, "rad=%d\n", rad);
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);
}
/*
if (i % 1000 == 0)
fprintf(stderr, "processing... %d\n", i);
*/
}
D.push_back(N);
sort(D.begin(), D.end());
M = D.size();
/*
if (M > 2000)
while (1);
*/
/*
fprintf(stderr, "%d divizori:\n", M);
for (i = 0; i < M; i++)
fprintf(stderr, "%I64d,", D[i]);
printf("\n");
*/
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("%d\n", A[M-1][1]);
return 0;
}