Advertisement
JavierN

Untitled

Feb 16th, 2020
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.30 KB | None | 0 0
  1. #include <cmath>
  2. #include <cstdio>
  3. #include <vector>
  4. #include <iostream>
  5. #include <algorithm>
  6. using namespace std;
  7.  
  8. typedef long long ll;
  9. const ll primeTop = 33000;
  10.  
  11. ll power(ll a, ll b){
  12. if (b == 0)
  13. return 1;
  14. else if (b == 1)
  15. return a;
  16. if (b % 2)
  17. return a * power(a*a, b/2);
  18. else
  19. return power(a*a, b/2);
  20. }
  21.  
  22. ll pcount;
  23. vector<ll> primes;
  24. void precomputePrimes(){
  25. primes = vector<ll>();
  26. vector<bool> isprime(primeTop, true);
  27. for (ll i = 2; i < primeTop; i++){
  28. if(isprime[i]){
  29. primes.push_back(i);
  30. for (ll c = i*i; c < primeTop; c += i)
  31. isprime[c] = false;
  32. }
  33. }
  34. pcount = primes.size();
  35. }
  36.  
  37. ll n, m, k;
  38. vector<ll> kfactors;
  39. void factorK(){
  40. ll r = k;
  41. kfactors = vector<ll> (pcount, 0);
  42. for(ll i = 0; i < pcount; i++){
  43. while(r % primes[i] == 0){
  44. r /= primes[i];
  45. kfactors[i]++;
  46. }
  47. //if(kfactors[i] > 0)
  48. //cerr << primes[i] << " ^ " << kfactors[i] << endl;
  49. }
  50. }
  51.  
  52. ll num;
  53.  
  54. bool check(){
  55. //cerr << "check " << num << endl;
  56. return (num <= min(n, m) && k/num <= max(n, m));
  57. }
  58.  
  59. bool iter(ll x){
  60. if(x == pcount - 1){
  61. if(check())
  62. return true;
  63. }
  64. else if (iter(x+1))
  65. return true;
  66. for(ll i = 1; i <= kfactors[x]; i++){
  67. //cerr << "num = " << num << endl;
  68. //cerr << "kfactors of " << primes[x] << " = " << kfactors[x] << endl;
  69. num *= primes[x];
  70. //cerr << "pcount = " << pcount << endl;
  71. if(x == pcount - 1){
  72. if(check())
  73. return true;
  74. }
  75. else if (iter(x+1))
  76. return true;
  77. }
  78. num /= power(primes[x], kfactors[x]);
  79. return false;
  80. }
  81.  
  82. int main() {
  83. precomputePrimes();
  84. int t;
  85. cin >> t;
  86. cin >> n >> m >> k;
  87. while(t--){
  88. //cerr << endl << "k = " << k << endl;
  89. if (t == 1)
  90. cerr << "yes" << endl;
  91. factorK();
  92. if (t == 1)
  93. cerr << "factored" << endl;
  94. //cerr << "factored" << endl;
  95. num = 1;
  96. if (iter(0))
  97. cout << "SI" << endl;
  98. else
  99. cout << "NO" << endl;
  100. }
  101. return 0;
  102. }
  103.  
  104. input:
  105. 16028
  106. 64 64 1000
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement