fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. long long countGifts(long long l, long long r, long long p) {
  5. auto countGiftsInRange = [&](long long start, long long end, long long power, long long gifts) {
  6. long long count = 0;
  7. for (long long i = start; i <= end; i++) {
  8. if ((power % i == 0) && (power * p % i != 0)) {
  9. count += gifts;
  10. }
  11. }
  12. return count;
  13. };
  14.  
  15. long long totalGifts = 0;
  16. totalGifts += countGiftsInRange(l, r, p, 1);
  17. totalGifts += countGiftsInRange(l, r, p * p, 2);
  18. totalGifts += countGiftsInRange(l, r, p * p * p, 3);
  19.  
  20. return totalGifts;
  21. }
  22.  
  23. int main() {
  24. long long l, r, p;
  25. cout << "Enter three positive integers l, r, p (l, r, p <= 10^18): ";
  26. cin >> l >> r >> p;
  27.  
  28. long long totalGifts = countGifts(l, r, p);
  29.  
  30. cout << "Total number of gifts received from " << l << " to " << r << ": " << totalGifts << endl;
  31.  
  32. return 0;
  33. }
Success #stdin #stdout 0.01s 5308KB
stdin
2 4 2
stdout
Enter three positive integers l, r, p (l, r, p <= 10^18): Total number of gifts received from 2 to 4: 0