我们给定一个整数,假设N被视为除数,它将被除以从1-N开始的数字,任务是计算那些设置位数比设置位数多的除数的数量除以给定数字N的商。
输入-int N = 6
输出- 除N的商外,具有更多设定位的除数计数是:5
解释-首先,我们将数字N除以从1-N开始的数字,并计算除数和商的设置位,即
1-> N = 6/1(1)= 6(2)= 1 <2 =不考虑
2-> N = 6/2(1)= 3(2)= 2 = 2 =已考虑
3-> N = 6/3(2)= 2(1)= 2> 1 =已考虑
4-> N = 6/4(1)= 1(1)= 1 = 1 =已考虑
5-> N = 6/5(2)= 1(1)= 2> 1 =已考虑
6-> N = 6/6(2)= 1(1)= 2> 1 =已考虑
如我们所见,我们将考虑所考虑的情况,输出将为5。
输入-int N = 10
输出- 除N的商外,具有更多设定位的除数计数是:8
解释-首先,我们将数字N除以从1-N开始的数字,并计算除数和商的设置位,即
1-> N = 10/1(1)= 10(2)= 1 <2 =不考虑
2-> N = 10/2(1)= 5(2)= 2 = 2 =已考虑
3-> N = 10/3(2)= 3(2)= 2 = 2 =已考虑
4-> N = 10/4(1)= 2(1)= 1 <2 =不考虑
5-> N = 10/5(2)= 2(1)= 2> 2 =已考虑
6-> N = 10/6(2)= 1(1)= 2> 1 =已考虑
7-> N = 10/7(3)= 1(1)= 3> 1 =已考虑
8-> N = 10/8(1)= 1(1)= 1 = 1 =已考虑
9-> N = 10/9(2)= 1(1)= 2> 2 =已考虑
10-> N = 10/10(2)= 1(1)= 2> 1 =已考虑
如我们所见,我们将考虑案例,输出将为8。
输入一个正整数N并将其divisors_quotient()作为参数传递给函数。
内部功能 divisors_quotient()
将N-调用返回给函数set_quo(N)+ 1,然后转到函数set_quo()
内部功能 set_quo()
创建一个临时变量作为start和end,并以1开头并以结束sqrt(N)。
启动WHILE循环,直到start <end,并创建一个临时变量temp并将其设置为(start + end)/ 2
检查IF(调用函数verify()并传递temp和N作为参数),然后将end设置为temp
ELSE,将开始设置为temp + 1
IF(!调用函数verify()并传递temp和N作为参数),然后返回start + 1。
ELSE,返回开始
内部功能 verify()
检查IF(对函数val_bit(temp / val)的调用小于对函数的调用val_bit(val)),然后返回true,否则返回False
内部功能 val_bit()
声明一个临时变量计数以存储结果。
启动循环,当val具有值时。在循环内部,将val设置为val / 2并将计数增加1。
返回计数。
#include <bits/stdc++.h>
using namespace std;
int val_bit(int val) {
int count = 0;
while (val) {
val = val / 2;
count++;
}
return count;
}
bool verify(int val, int temp) {
if (val_bit(temp / val) <= val_bit(val)) {
return true;
}
return false;
}
int set_quo(int N) {
int start = 1;
int end = sqrt(N);
while (start < end) {
int temp = (start + end) / 2;
if (verify(temp, N)) {
end = temp;
} else {
start = temp + 1;
}
}
if (!verify(start, N)) {
return start + 1;
} else {
return start;
}
}
int divisors_quotient(int N) {
return N - set_quo(N) + 1;
}
int main() {
int N = 10;
cout << "具有比置N的商还要多的置位位数的除数的计数是: " << divisors_quotient(N);
return 0;
}如果我们运行上面的代码,它将生成以下输出-
输出结果
具有比置N的商还要多的置位位数的除数的计数是: 8