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