c++ - C++:如何从k = 2 ^ a * b中找到a和b?

标签 c++ algorithm math cryptography

在C++中给出以下代码:

$$ k = 2 ^ a \ cdot b,$$

只知道k的值而b是奇数。您如何找到a的值和b的值?

我确实考虑过以下几点:

  • 如果k为奇数,则a必须为零,b为k
  • 如果k是偶数,我将通过一个for循环遍历所有可能的b并检查k%b ==0。如果是这种情况,我将取log2(k / b),如果这样我可以返回整数,b = k / b,a = log2(b)。

  • 我的问题:如何检查log2(k / b)是否给我返回整数?

    C++代码:
    Big k(9);
    int r = 4;
    int n = pow(2,r);
    if (k % 2 == 1)
    {
        a = 0;
        b = k;
    }
    else
    {
        for (int b = 1; b < n; b += 2)
        {
            if (k % b == 0 && LOGARITHM OF k / b IS POSSIBLE)
            {
                a = log2(b);
            }
        }
    }
    

    顺便说一句:n也给定。除了a和b以外的所有东西都给定了。

    最佳答案

    您可以执行以下操作:

    int a = 0;
    while (k % 2 == 0) {
      ++a;
      k /= 2;
    }
    int b = k;
    // you have a, b
    

    最简单的方法是将2**a*b除以2,直到不再为偶数为止,因此您找到了b

    关于c++ - C++:如何从k = 2 ^ a * b中找到a和b?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62309283/

    相关文章:

    c++ - MFC:到底什么是 CSplitterWnd 插入符?

    共享库中的 c++ 静态变量和更好的可见性

    Excel - 确定排列的奇偶性

    c++ - 连续分布的指数衰减随机分布和离散化

    java - 除法时输出为零?

    具有函数声明/原型(prototype)和定义的 C++ 模板

    c++ - 在 constexpr 变量模板中模拟 nan/inf

    python - 如何为k最近邻分类创建置信度估计的颜色图

    algorithm - 有序字符串到整数哈希函数保留其参数的字典顺序

    c - 递归,算法可能出错