C ++中具有除N商以外的商的置位位数的除数数

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

猜你喜欢