有没有一种有效的方法来生成 N 小于 X 的因子数?

问题描述

我是编程领域的初学者。我只想找到小于 N 的正整数 X 的因数/除数数。 (X 本身是 N 的因数)。我有一种幼稚的方法,它不适用于 N,X 上的查询。

这是我的方法

int Divisors(int n,int x) {
    int ans = 0;
    if (x < sqrt(n)) {
        for (int i = 1; i < x; i++) {
            if (n % i == 0) {
                ans++;
            }
        }
    } else
        for (int i = 1; i <= sqrt(n); i++) {
            if (n % i == 0) {
                if (n / i == i && i < x)
                    ans++;
                else {
                    if (i < x)
                        ans++;
                    if (n / i < x)
                        ans++;
                }
            }
        }
    return ans;
}

有什么有效的方法可以做到这一点吗?请帮帮我!

我试图解决的实际问题: 给定一些 MN,我需要遍历所有小于或等于 N(1 <= i <= N) 的正整数,我需要计算比当前小多少个数字数字 (i) 的存在使得它们将 i 的最后一个小于或等于 M 的倍数(即 M - M % i)相除,最后找到所有的总和计数。

示例 给定 N = 5M = 10 答案:6

说明:

i = 1 count = 0

i = 2 count = 1 (10 % 1 = 0)

i = 3 count = 1 (9 % 1 = 0)

i = 4 count = 2 (8 % 1 = 0,8 % 2 = 0)

i = 5 count = 2 (10 % 1 = 0,10 % 2 = 0)

因此所有计数的总和 = 6

解决方法

问题的措辞有点令人困惑。
我假设您正在查找小于数字 x的数字 n 的所有因数/除数 D 的集合的大小em>,其中 xn 的因数。

一种更简单的方法是从所有数字 1 到 x 进行迭代,不包括 x,并使用模运算符 %。>

代码:

int NumOfDiv(int x,int n){
  int count = 0;

  for(int i=1; i<x; i++){
    if(n % i == 0)  //This indicates that i divides n,having a remainder of 0,look up % as it is very useful with number theory
      count++;
  }

  return count;
}

示例:

int TestNum = NumOfDiv(4,12)

TestNum 的值为 3

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...