fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int MAXN = 1e4 + 3;
  5. long long mu[MAXN];
  6.  
  7. bool is_prime[MAXN] = {false};
  8. void sieve_eratosthenes() {
  9. std::fill(&is_prime[0], &is_prime[0] + MAXN, true);
  10. is_prime[1] = false;
  11. for(int i = 2; i*i <= MAXN; i++){
  12. if(is_prime[i]){
  13. for(int j = i*i; j < MAXN; j += i){
  14. is_prime[j] = false;
  15. }
  16. }
  17. }
  18. }
  19. void compute_mu() {
  20. mu[1] = 1;
  21. for(int i = 2; i < MAXN; i++) {
  22. if(is_prime[i]) {
  23. mu[i] = -1;
  24. for(int j = MAXN/i; j > 1; j--) {
  25. if(j == i || j*i >= MAXN) continue;
  26. mu[j*i] = mu[j] * (-1);
  27. }
  28. }
  29. }
  30. }
  31.  
  32. long long F[MAXN];
  33.  
  34. int main() {
  35. ios_base::sync_with_stdio(false);
  36. long long alpha, beta;
  37. alpha = 1234123;
  38. beta = 34123;
  39. sieve_eratosthenes();
  40. compute_mu();
  41. for(int g = 1; g < MAXN; g++) {
  42. for(int k = g; k < MAXN; k += g) {
  43. F[g] += mu[k/g] * (alpha/k) * (beta/k);
  44. }
  45. }
  46. for(int g = 1; g < MAXN; g++) {
  47. long long temp = (alpha/g) * (beta/g);
  48. for(int k = g*2; k < MAXN; k += g) {
  49. temp -= F[k];
  50. }
  51. assert(temp == F[g]);
  52. }
  53. return 0;
  54. }
  55.  
Success #stdin #stdout 0s 3628KB
stdin
Standard input is empty
stdout
Standard output is empty