• nyoj 102 次方求模


    次方求模

    时间限制:1000 ms  |  内存限制:65535 KB

    难度:3

    描述

    a的b次方对c取余的值

     

    输入

    第一行输入一个整数n表示测试数据的组数(n<100)
    每组测试只有一行,其中有三个正整数a,b,c(1=<a,b,c<=1000000000)

    输出

    输出a的b次方对c取余之后的结果

    样例输入

    3

    2 3 5

    3 100 10

    11 12345 12345

    样例输出

    3

    1

    10481

    #include<stdio.h>
    #include<stdlib.h>
    //快速幂算法,数论二分 
    long long powermod(int a,int b, int c) //不用longlong就报错,题目中那个取值范围不就在2的31次方内
    {
        long long t;
        if(b==0)  return 1%c;
        if(b==1)  return a%c;
        t=powermod(a,b/2,c);//递归调用,采用二分递归算法,,注意这里n/2会带来奇偶性问题
        t=t*t%c;//二分,乘上另一半再求模
        if(b&1)  t=t*a%c;//n是奇数,因为n/2还少乘了一次a
        return t;
    }
    int main()
    {
        int n;
        long long a,b,c;
        scanf("%d",&n);
        while(n--)
        {
            scanf("%lld%lld%lld",&a,&b,&c);
            printf("%lld
    ",powermod(a,b,c));
        }
        return 0;
     }
    

      

  • 相关阅读:
    线程与进程
    Java集合框架体系JCF
    Java异常
    抽象,接口和Object类
    Java三大特性
    面向对象
    数组
    Java 控制结构与方法
    数据类型与变量
    Java基础之入门
  • 原文地址:https://www.cnblogs.com/zhangliu/p/7052689.html
Copyright © 2020-2023  润新知