C++表示一个数的幂次数

2023年 8月 27日 89.3k 0

C++表示一个数的幂次数

讨论用另一个数的幂来表示一个数的问题。给定两个数,x和y。我们需要判断是否可以用x的幂来表示y,其中每个x的幂只能使用一次,例如

Input: x = 4, y = 11
Output: true
Explanation: 4^2 - 4^1 - 4^0 = 11 Hence y can be represented in the power of x.

Input: x = 2, y = 19
Output: true
Explanation: 2^4 + 2^1 + 2^0 =19 Hence y can be represented in the power of x.

Input: x = 3, y = 14
Output: false
Explanation: 14 can be represented as 3^2 + 3^1 + 3^0 + 3^0 but we cannot use one term of power of x twice.

登录后复制

找到解决方案的方法

通过检查19如何以2的幂表示的示例,我们可以形成一个方程−

c0(x^0) + c1(x^1) + c2(x^2) + c3(x^3) + … = y ….(1),

登录后复制

其中 c0、c1、c2 可以是 -1、0、+1,表示是否减去 (-1)项、加上 (+1)项、不包括 (0)项 −

c1(x^1) + c2(x^2) + c3(x^3) + … = y - c0,

登录后复制

将x作为公共因子,

c1(x^0) + c2(x^1) + c3(x^2) + … = (y - c0)/x ….(2),

登录后复制

从等式(1)和(2)我们可以再次表示数字,为了存在一个解,(y - Ci)应该能被x整除,而Ci只能包含-1、0和+1。

因此最后我们需要检查直到y>0,是否满足[(y-1) % x == 0]或者[(y) % x == 0]或者[(y+1) % x == 0],或者是否不存在解。

示例

#include
using namespace std;
int main(){
int x = 2, y = 19;
// checking y divisibility till y>0
while (y>0) {
// If y-1 is divisible by x.
if ((y - 1) % x == 0)
y = (y - 1) / x;
// If y is divisible by x.
else if (y % x == 0)
y = y / x;
// If y+1 is divisible by x.
else if ((y + 1) % x == 0)
y = (y + 1) / x;
// If no condition satisfies means
// y cannot be represented in terms of power of x.
else
break;
}
if(y==0)
cout

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论