5 条题解

  • 0
    @ 2025-3-24 11:00:47
    #include <iostream>
    
    using namespace std;
    
    int main() {
        long long n, cnt = 0;
        cin >> n;
    
        for (long long a = 1; a * a * a <= n; a++) {
            for (long long b = a; a * b * b <= n; b++) {
                long long max_c = n / (a * b);
                if (max_c >= b) cnt += max_c - b + 1;
            }
        }
    
        cout << cnt << endl;
    
        return 0;
    }
    
    • 0
      @ 2024-11-9 12:19:30
      #include <stdio.h>
      #include <math.h>
      
      int main()
      {
          unsigned long long result = 0;
          unsigned long long n;
          scanf("%llu", &n);
          unsigned long long x1 = (unsigned long long)pow(n, 1.0 / 3);
          unsigned long long x2 = (unsigned long long)pow(n, 1.0 / 2);
      
          for (unsigned long long a = 1; a <= x1+1; a++)
          {
              for (unsigned long long b = a; b <= x2+1; b++)
              {
                  unsigned long long x = a * b;
                  if (x * b > n)
                  {
                      break;
                  }
                  unsigned long long maxc = n / x;
                  if (b <= maxc)
                  {
                      result += (maxc - b + 1);
                  }
              }
          }
      
          printf("%llu\n", result);
          return 0;
      }
      
      
      • 0
        @ 2024-4-10 21:42:51

        #include<bits/stdc++.h> using namespace std; int main() { long long n,s = 0; cin >> n; for(long long a = 1;a * a * a <= n;a++) {

        for(long long b = a;a * b * b <= n;b++) { if(b <= n / (a * b)) {//左边界必须小于右边界 s += (n / (a * b) - b + 1);//s += (n / (a * b) - b + 1);

        // 这行代码计算了在当前 a 和 b 的条件下,C 可以取的值的数量。

        //n / (a * b) 是 C 的最大可能值,b - 1 是 C 的最小可能值(因为 B 必须大于 A),所

        //以 n / (a * b) - b + 1 就是 C 可以取的所有整数值的数量。这个值被累加到 s 上。 } } } cout << s; }

        • 0
          @ 2024-4-5 15:41:14
          #include <cstdio>
          
          int main() {
          	long long n;
          	long long res = 0;
          	scanf("%lld", &n);
          	
          	// A*B*C <= N
          	// => A*B <= N/C
          	// => C <= N/(A*B)
          	
          	// 因为 A <= B <= C
          	// A*A*A <= N (如果 A^3都 大于 n, 那么 A*B*C就更不用说, 肯定 > n, 所以是不合法的)
          	// A*B*B <= N
          	
          	for (long long a = 1; a * a * a <= n; ++a) { // 注意 遍历需要使用long long, 不然乘法会爆炸 
          		for (long long b = a; a * b * b <= n; ++b) {
          			long long tmp = n / (a * b) - b;
          			if (tmp >= 0)
          				res += tmp + 1; // 说明 1 ~ n/(a*b) 个 c 都是合法的
          								// - b 是为了保证 b < c
          								// + 1 是当 b == c 时候, b - c 为 0 但是计数需要+1 
          		}
          	}
          	
          	printf("%lld\n", res);
          	
          	return 0;
          }
          
          • -2
            @ 2024-4-8 19:55:29
            using namespace std;
            int main() {
            long long n, s = 0; // 声明变量n和累加器s,用于存储输入的数字
            cin >> n; // 从标准输入读取一个数字,存入变量n中
            for (long long a = 1; a <= n; a++) { // 外层循环,遍历a从1到
            
            for (long long b = 1; b <= n; b++) { // 第二层循环,遍历
            
            for (long long c = 1; c <= n; c++) { // 第三层循环,
            
            if (a * b * c <= n&&a<=b&&b<=c) { // 判断条件,如果a*b*c小于等于n 
            
            s++; // 累加器加一
            }
             }
            }
             }
            cout << s; // 将结果输出到标准输出
            }
            
            
            • 1

            信息

            ID
            79
            时间
            1000ms
            内存
            256MiB
            难度
            8
            标签
            递交数
            1554
            已通过
            256
            上传者