fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. typedef long long ll;
  5.  
  6. vector<ll> dzielniki;
  7. const ll INF = (ll)1e18;
  8. const int maxn = 1e6;
  9.  
  10. void ZnajdzDzielniki(ll n)
  11. {
  12. if(n % 2 == 0)
  13. {
  14. dzielniki.push_back(2);
  15. while(n%2==0)
  16. n = n/2;
  17. }
  18.  
  19. for (ll i = 3LL; i*i <= n; i = i + 2)
  20. {
  21. while (n % i == 0)
  22. {
  23. if(dzielniki.empty()){
  24. dzielniki.push_back(i);
  25. continue;
  26. }
  27.  
  28. if(dzielniki.back() != i) {
  29. dzielniki.push_back(i);
  30. }
  31. n = n/i;
  32. }
  33. }
  34.  
  35. if (n > 1)
  36. dzielniki.push_back(n);
  37. }
  38.  
  39. ll findUntill(ll n){
  40. ll ansOR=n;
  41. ll ans = n;
  42. for (int i = 1; i < (1 << dzielniki.size()); ++i) {
  43. int ile = 1;
  44. ll co = 1LL;
  45. for (int j = 0; j < dzielniki.size(); ++j) {
  46. if (i & (1 << j)) {
  47. ile *= -1;
  48. co *= dzielniki[j];
  49. }
  50. }
  51.  
  52. ans += ile * (ansOR/co);
  53. }
  54.  
  55. return ans;
  56. }
  57.  
  58. int main(){
  59. ll n, k;
  60. int c;
  61.  
  62. cin >> n >> k >> c;
  63. ZnajdzDzielniki(n);
  64.  
  65. ll l=1LL, r=INF;
  66.  
  67. while(l<r){
  68. ll mid = (l+r)/2;
  69.  
  70. if(findUntill(mid) > k-1) {
  71. r=mid;
  72. } else {
  73. l =mid+1;
  74. }
  75. }
  76.  
  77. int ile = 0;
  78. ll i = l;
  79.  
  80. while(ile < c){
  81. if(__gcd(n, i) == 1){
  82. cout << i << ' ';
  83. ile++;
  84. }
  85. i++;
  86. }
  87.  
  88. return 0;
  89. }
  90.  
Success #stdin #stdout 0.01s 5436KB
stdin
10 3 4
stdout
7 9 11 13