C ++中具有除N商以外的商的置位位数的除数数
我们给定一个整数,假设N被视为除数,它将被除以从1-N开始的数字,任务是计算那些设置位数比设置位数多的除数的数量除以给定数字N的商。
例如
输入-intN=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。
输入-intN=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