如何有效地找到整数k的值,其中q有限地划分b ^ k?

时间:2018-05-19 07:56:28

标签: division integer-division greatest-common-divisor

我们给出了两个整数b和q,我们想找到整数'k'的最小值,q完全除以b ^ k或k不存在。我们能有效地找出k的价值吗?不仅迭代k(0,1,2,3,...)的每个值和检查(b ^ k)%q == 0),其中q <= k或q> = k。

3 个答案:

答案 0 :(得分:0)

首先,除非q = 1,否则k将永远不会等于零。除非q = b,否则k永远不会等于1。

接下来,如果你可以对q和b进行因子分解,那么你就可以对它们进行推理。

如果b的任何素因子根本不是q的因子,则k不存在。否则,k必须足够大,以便b ^ k的每个因子用q表示。

这里有一些伪代码:

if (q==1) return 0;
if (q==b) return 1;
// qfactors and bfactors are arrays, one element per factor
let qfactors = prime_factorization(q);
let bfactors = prime_factorization(b);
let kmin=0;
foreach (f in bfactors.unique) {
     let bcount = bfactors.count(f);
     let qcount = qfactors.count(f);
     if (qcount==0 || qcount < bcount) return -1; // k does not exist
     kmin_f = ceiling(bcount/qcount);
     if (kmin_f > kmin) let kmin = kmin_f;
}
return kmin;

答案 1 :(得分:0)

如果q = 1; k = 0

如果b = q; k = 1

如果b> q和因素; k = 1

如果b < q和因素; k!=我

如果b!= q而不是因素; k!=我

我们知道, Dividend = Divisor x Quotient + Reminder

=&GT; Dividend = Divisor x Quotient [Here,Reminder = 0]

现在计算Maxima和Minima,因为Quotient的值越低'k'的值。

如果您将商数视为1(最低但是分裂情况)那么'k'的公式变为,

k = log q / log b

答案 2 :(得分:0)

我找到了解决方案-
如果q除以 pow(b,k),则 q 的所有素数都是 b 的素数。现在我们可以进行迭代 q = q÷gcd(b,q),而 gcd(q,b)≠1 。如果 q≠1 经过迭代,则存在 q 的素数,而不是 b 的素数
然后
k不存在
其他
k =迭代次数