fork(2) download
  1. #include <iostream>
  2. #include <iomanip>
  3. using namespace std;
  4.  
  5. // Let's see if this works !!!
  6. // (After all, I might have screwed up somewhere, so there's no guarantees!)
  7.  
  8. unsigned int sqrtOfLong(unsigned long x) {
  9. // inspired by https://w...content-available-to-author-only...e.com/watch?v=haaCoVrGd6k
  10. unsigned long leftover = x;
  11. unsigned long leftoverStep = 0UL;
  12. unsigned long result = 0UL;
  13. unsigned long resultStep = 0x40000000UL;
  14. do {
  15. leftoverStep >>= 1;
  16. result >>= 1;
  17. if ((leftoverStep + resultStep) <= leftover) {
  18. leftoverStep += resultStep;
  19. leftover -= leftoverStep;
  20. result += resultStep;
  21. leftoverStep += resultStep;
  22. }
  23. resultStep >>= 2;
  24. } while (resultStep);
  25. return ((unsigned int)result);
  26. }
  27.  
  28. int main() {
  29. unsigned long ok = 0;
  30. unsigned long ng = 0;
  31.  
  32. for (unsigned long i = 0; i <= 0xFFFFUL; i++) {
  33. unsigned long qu = i * i;
  34. unsigned int rt = sqrtOfLong(qu);
  35. // cout << setw(5) << i << " " << setw(5) << qu << " " << setw(5) << rt << "\n";
  36. if (i == rt) {
  37. ok++;
  38. }
  39. else {
  40. ng++;
  41. }
  42. // cout << "\n";
  43. qu += (2*i);
  44. rt = sqrtOfLong(qu);
  45. // cout << setw(5) << i << " " << setw(5) << qu << " " << setw(5) << rt << "\n";
  46. if (i == rt) {
  47. ok++;
  48. }
  49. else {
  50. ng++;
  51. }
  52. }
  53. cout << "\n";
  54. cout << "OK: " << ok << "\n";
  55. cout << "NG: " << ng << "\n";
  56.  
  57. // your code goes here
  58. return 0;
  59. }
Success #stdin #stdout 0s 4356KB
stdin
Standard input is empty
stdout
OK: 131072
NG: 0