zoukankan      html  css  js  c++  java
  • 【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;
    }
    
    
    
  • 相关阅读:
    简易自制线程池(备忘)
    大数据量的删除过程查看
    收集书籍备忘
    6月12日C代码
    fseek()
    区分int *p[4]与int (*p)[4]
    常用的字符串处理函数 C语言
    6月11日
    C学习代码
    文件读取 C语言
  • 原文地址:https://www.cnblogs.com/zhenglw/p/9507928.html
Copyright © 2011-2022 走看看