fork download
  1. #include <iostream>
  2. using namespace std;
  3. long long n;
  4. int p, num = 0, prime[26];
  5. inline void init() {
  6. static int mark[110];
  7.  
  8. for (int i = 2; i <= p; i++) {
  9. if (!mark[i]) {
  10. prime[num++] = i;
  11. }
  12.  
  13. for (int j = 0, t = 2; j < num
  14. && i * t <= p; t = prime[++j]) {
  15. mark[i * t] = 1;
  16.  
  17. if (i % t == 0) {
  18. break;
  19. }
  20. }
  21. }
  22. }
  23. unsigned int ans = 0;
  24. void dfs(long long n, int p) {
  25. if (!p) {
  26. cout << n << '\n';
  27. ans += __lg(n) + 1;
  28. return;
  29. }
  30.  
  31. dfs(n, p - 1);
  32.  
  33. if (n >= prime[p]) {
  34. dfs(n / prime[p], p);
  35. }
  36. }
  37. int main() {
  38. cin >> n >> p;
  39. init(), dfs(n, num - 1);
  40. cout << ans << endl;
  41. return 0;
  42. }
  43.  
Success #stdin #stdout 0s 5272KB
stdin
36 3
stdout
36
12
4
1
14