Pagini recente » Cod sursa (job #1618640) | Cod sursa (job #1749916) | Cod sursa (job #711294) | Cod sursa (job #956504) | Cod sursa (job #2098643)
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
long long n, k;
long long a[5002];
long long d[5002][5002];
long long f[5002];
int NR;
const int MOD = 100007;
vector <pair <long long, int> > Hash[MOD + 1];
inline void add_Hash(long long x, int NR){
int L = x % MOD;
Hash[L].push_back(make_pair(x, NR));
}
inline int find_Hash(long long x){
int L = x % MOD;
for(auto it : Hash[L])
if(it.first == x) return it.second;
return 0;
}
int main()
{
freopen("desc.in", "r", stdin);
freopen("desc.out", "w", stdout);
scanf("%lld%lld", &n, &k);
a[++NR] = 1;
a[++NR] = n;
for(int i = 2; i * i <= n ; ++i){
if(n % i == 0){
if(i != n / i) a[++NR] = n / i;
a[++NR] = i;
}
}
sort(a + 1, a + NR + 1);
for(int i = 1; i <= NR ; ++i){
f[i] = a[i];
add_Hash(a[i], i);
}
d[1][1] = 1;
for(int i = 2; i <= NR ; ++i){
for(int j = 1; j <= NR ; ++j) d[i][j] = d[i - 1][j];
for(int j = 1; j <= NR ; ++j){
if(d[i - 1][j] == 0) continue ;
long long x = 1LL * f[j] * a[i];
int pos = find_Hash(x);
if(pos == 0) continue ;
d[i][pos] = d[i][pos] + d[i - 1][j];
d[i - 1][pos] = d[i - 1][pos] + d[i - 1][j];
}
}
printf("%d\n", d[NR][NR]);
printf("1 1 1 1");
return 0;
}