fork download
  1. #include <bits/stdc++.h>
  2. using namespace std ;
  3.  
  4.  
  5. int const NMAX = 1000010 ;
  6. vector<int> divisors[NMAX] ;
  7. bool is_pirme[NMAX] ;
  8.  
  9.  
  10. long long get_ceil(long long f, long long g) {
  11. return ceil(f/(double)g)*g ;
  12. }
  13. int main() {
  14. long long int a, b ;
  15. scanf("%lld", &a) ;
  16. b = a ;
  17. for(int i = 2; i < NMAX; i++) {
  18. is_pirme[i] = true ;
  19. }
  20. for(int i = 2; i < NMAX; i++) {
  21. if(is_pirme[i]) {
  22. for(int j = i+i; j < NMAX; j += i) {
  23. is_pirme[j] = false ;
  24. }
  25. for(long long j = get_ceil(a, i); j <= b; j += i) {
  26. divisors[j-a].push_back(i) ;
  27. }
  28. }
  29. }
  30. long long ans = 0 ;
  31. for(long long i = a; i <= b; i++) {
  32. map<long long, long long> fq ;
  33. long long tmp = i ;
  34. for(int j = 0; j < divisors[i-a].size(); j++) {
  35. int denom = divisors[i-a][j] ;
  36. while(tmp%denom == 0) {
  37. fq[denom]++ ;
  38. tmp /= denom ;
  39. }
  40. }
  41. if(tmp != 1) fq[1]++ ;
  42. int Arr[1000] ;
  43. map<long long, long long>::iterator it = fq.begin();
  44. int ind = 0, flag = 0, index = 0;
  45. while(it != fq.end()) {
  46. if(it->first >= 1)
  47. Arr[index++] = it->second ;
  48. it++ ;
  49. }
  50. long long pro = 1 ;
  51. for(int i = 0; i < index; i++) pro *= (Arr[i]+1) ;
  52. ans = pro ;
  53. }
  54. cout << ans << endl ;
  55. return 0 ;
  56. }
Success #stdin #stdout 0.01s 40480KB
stdin
10000000000000000
stdout
289