题解 | #排序#

排序

https://www.nowcoder.com/practice/2baf799ea0594abd974d37139de27896

总结:
本题与快速幂类似,存在两个难点:1.计算过程中数值过大 2.多个相加特别大时耗时长
难点1:

(a+b)%p = ((a%p)+(b%p))%p

利用上述公式可以解决问题1
难点2:
可以根据b为奇数或偶数,可以将其转为加法,将b=b/2,a=a*2可以减少大数加法

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = Integer.parseInt(sc.nextLine());
        for(int i=0;i<n;i++){
            String[] line = sc.nextLine().split(" ");
            int a = Integer.parseInt(line[0]);
            int b = Integer.parseInt(line[1]);
            int p = Integer.parseInt(line[2]);
            int res = 0;
            while(b>0){
                if((b&1)==1)//b为奇数
                    res =(res+a)%p;
                a = (a*2)%p;
                b = b>>1;
            }
            System.out.println(res);
            res = 0;
        }

    }
}
全部评论

相关推荐

10-15 09:13
已编辑
天津大学 soc前端设计
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务