题解 | #快速乘#

快速乘

https://www.nowcoder.com/practice/043c66e95fe548d0b8e56c1830330f93

import sys

lines = []
for line in sys.stdin:
    a = line.split()
    lines.append(a)

for i in range(int(lines[0][0])):
    cur_line = lines[i+1]
    
    aa = int(cur_line[0])
    bb = int(cur_line[1])
    pp = int(cur_line[2])

    add_result = 0

    while 1:
        if bb == 0:
            add_result = 0
            break
        if bb == 1:
            add_result += aa
            break
        else:
            if bb % 2 == 1:
                add_result += aa  # 除2余1,意味着在此二进制位为1,则执行一次+=
            aa = (aa + aa)  # 每执行一步,相当于aa乘以2^n
            bb = bb // 2

    result = add_result % pp
    print(result)

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务