• 【poj1995】快速幂


    题目大意

    求a^b %p
    1≤a,b,p≤10^9

    思路

    时间O(10^9)一定会爆T,采用数学方法+位运算,得到O(log b)的快速幂算法

    代码

    #include<cstdio>
    #include<iostream>
    #include<cctype>
    #include<algorithm>
    #define ll long long
    using namespace std;
    
    inline int read()
    {
    	int ans=0,f=1;
    	char chr=getchar();
    	while(!isdigit(chr)) {if(chr='-') f=-1; chr=getchar();}
    	while(isdigit(chr)) {ans=ans*10+chr-'0'; chr=getchar();}
    	return ans*f;
    }
    ll T,p; 
    int n;
    
    ll calc(ll a,ll b,ll c)//计算a^b%p
    {
    	ll tans=1;//记录答案
    	while(b)
    	{
    		if(b&1) tans=tans*a%p;//如果是奇数,意味着这一处数位要取,更新ans;
    		a=a*a%p;//更新a;
    		b>>=1;//将b左移一位
    	}
    	return tans;
    }
    int main()
    {
    	T=read();
    	while(T--)
    	{
    		ll ans=0;
    		p=read();
    		n=read();
    		for(int i=1;i<=n;i++)
    		{
    			ll a=read(),b=read();
    			ans=(ans+calc(a,b,p))%p;
    		}
    		printf("%d
    ",ans);
    	}
    	return 0;
    }
    
    
    
  • 相关阅读:
    iOS—UI —推送实现
    iOS—UI —懒加载
    iOS多线程和NSRunLoop概述
    ios安全性---AES加密
    iOS私有API
    iOS多线程 && Runloop
    iOS毛玻璃效果
    Swift -4-对象与类
    Swift -3-函数&闭包
    Swift -1- 简介&简单值&基本类型
  • 原文地址:https://www.cnblogs.com/zhenglw/p/9507928.html
Copyright © 2020-2023  润新知