问题描述
我是编程领域的初学者。我只想找到小于 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;
}
有什么有效的方法可以做到这一点吗?请帮帮我!
我试图解决的实际问题:
给定一些 M
和 N
,我需要遍历所有小于或等于 N
(1 <= i <= N
) 的正整数,我需要计算比当前小多少个数字数字 (i
) 的存在使得它们将 i
的最后一个小于或等于 M
的倍数(即 M - M % i
)相除,最后找到所有的总和计数。
示例
给定 N = 5
和 M = 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>,其中 x 是 n 的因数。
一种更简单的方法是从所有数字 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