algorithm - 在 O(nlogn) 中找到 (x^n divide p) 的提醒

标签 algorithm time-complexity

我想在 O(nlogn), n=2^k 中找到 (x^n divide p) 的提醒; 我写了这个,但这不是真的,你能帮帮我吗?

rem(int x,int n,int p){

if (n==1)
 return x%p;
else
 return rem(x,n/2,p);
}

最佳答案

假设这是家庭作业,这里有一个提示:继续阅读 exponentiation by squaring ,它为您提供构建解决方案所需的一切,包括伪代码。

您当前的实现不区分 n 的偶数和奇数值,只有当 n 是 2 的幂时才正确。您可以扩展您的解决方案以适用于所有 n(见下文)。

当你得到 rem(x,n/2,p) 的返回值并且 n 是偶数时,你应该将结果平方并取余数正方形。

您可以扩展它以适用于所有 n,而不仅仅是 2 的幂,方法是将结果另外乘以 x 并取余对于 n 的奇数值。

关于algorithm - 在 O(nlogn) 中找到 (x^n divide p) 的提醒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10142222/

相关文章:

php - 为什么冒泡排序从 C 移植到 PHP 不起作用?

algorithm - HSL插值

c - 任何给定正整数的必要二进制数字的数量是否真的是 ceil(log_2 n)?

java - 二叉搜索树删除的时间复杂度

algorithm - 关于最短路径的非常困难和优雅的问题

algorithm - 合并重叠的轴对齐矩形

c++ - 如何有效地计算第n个n位回文?

algorithm - 为什么执行 n union find (union by size) 操作的时间复杂度是 O(n log n)?

big-o - 关于时间复杂度,大O表示法

data-structures - 为什么在二叉搜索树中查找是 O(log(n))?