码迷,mamicode.com
首页 > 其他好文 > 详细

快速幂浅谈

时间:2019-08-08 14:59:00      阅读:82      评论:0      收藏:0      [点我收藏+]

标签:mda   方法   i++   print   快速幂   using   car   names   cin   

快速幂——>Miller_Rabin方法

1.初步认知:2

// 11 == 1101 == 2^0+2^2+2^3
#include<bits/stdc++.h>
using namespace std;
int pow(int a,int b)
{
    int ans=1,base=a;
    while(b!=0)
    {
        if(b&1!=0) ans*=base;
        base*=base;
        b>>=1;
    }
    return ans;
}
int main()
{
    int a,b;
    while(~scanf("%d%d",&a,&b))//scanf("%d%d",&a,&b);
    {
        printf("%d\n",pow(a,b));
    }
    return 0;
}

 

 

 

 2.

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll qmod(ll a,ll b)
{
	ll ans=1,base=a;
	while(b)
	{
		if(b&1) ans*=base;
		base*=base;
		b>>=1;
	}
	return ans;
}
int main()
{
	ll a,b;
	while(~scanf("%lld%lld",&a,&b))
	{
		printf("%lld\n",pow(a,b));
	}
	return 0;
}

3.从知乎上借鉴的:

#include<bits/stdc++.h>
using namespace std;
int pow(int a,int b,int p)
{
	int ans=1;
	while(b)
	{
		if(b&1) ans=(long long) ans*a%p;
		a=(long long)a*a%p;
		b>>=1;
	}
	return ans;
}
int main()
{
	int a,b,p;
	while(cin>>a>>b>>p) cout<<pow(a,b,p)<<endl;
	return 0;
}

4.

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll qmod(ll a,ll n,ll m)//calculate the value of (a^n MOD m). 
{
	ll ans=1;
	while(b)
	{
		if(b&1) ans=ans*a%m;
		a=a*a%m;
		b>>=1;
	}
	return ans;
}
int main()
{
	ll a,b,m;
	while(cin>>a>>b>>m) cout<<qmod(a,b,m)<<endl;
	return 0;
}

5.

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll prime[65000];
void f()
{
	prime[0]=prime[1]=0;
	for(int i=2;i<65000;i++) prime[i]=1;
	for(int i=2;i<65000;i++)
		if(prime[i])
			for(int j=2*i;j<65000;j+=i) prime[j]=0;
}//素数提前打表 

ll powmod(ll a,ll n,ll m)//a^n MOD m;
{
	ll ans=1;
	while(n)
	{
		if(n&1) ans=ans*a%m;
		a=a*a%m;
		n>>=1;
	}
	return ans;
}

int tests(int n)
{
	for(int i=2;i<n;i++)
	{
		if(powmod(i,n,n)!=i) return 0;
	}
	return 1;
}

int main()
{
	f();
	int n;
	while(cin>>n && n)
	{
		if(!prime[n] && tests(n))
			cout<<"The number "<<n<<" is a Carmichael number.\n";
		else 
			cout<<n<<" is normal.\n";
	}
	return 0;
}

  ——————————————————————————————https://blog.csdn.net/qq_41785863/article/details/81266531

 

快速幂浅谈

标签:mda   方法   i++   print   快速幂   using   car   names   cin   

原文地址:https://www.cnblogs.com/dragondragon/p/11321013.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!