我们给定一个整数,假设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