快速幂取模&&素数筛选&&最大公约数
2014-03-09 21:01
246 查看
1.碾转相除
int gcd(int a,int b)
{
if(b==0) return a;
return gcd(b,a%b);
}
(机智的师兄说写成三目运算符更好看-_-!)
2.埃氏筛选
要枚举n以内的素数。便从2~m(范围内最大的素数)的倍数全从n个数内划去,反复操作,即可枚举
int a[maxn];
int isprime[maxn];
int sieve(int n)
{
int p=0;
for(int i=0;i<=n;i++)
isprime[i]=1;
isprmie[0]=isprime[1]=0;
for(int i=2;i<=n;i++)
{
if(isprime[i])
{
a[p++]=i;
for(int j=i*2;j<=;j+=i)
isprime[j]=0;
}
}
return p;
}
3.快速幂取模
int qumo(int a,int b,int c)
{
int ans=1;
a=a%c;
while(b>0)
{
if(b%2==1)
ans=(ans*a)%c;
b/=2;
a=(a*a)%c;
}
return ans;
}
int gcd(int a,int b)
{
if(b==0) return a;
return gcd(b,a%b);
}
(机智的师兄说写成三目运算符更好看-_-!)
2.埃氏筛选
要枚举n以内的素数。便从2~m(范围内最大的素数)的倍数全从n个数内划去,反复操作,即可枚举
int a[maxn];
int isprime[maxn];
int sieve(int n)
{
int p=0;
for(int i=0;i<=n;i++)
isprime[i]=1;
isprmie[0]=isprime[1]=0;
for(int i=2;i<=n;i++)
{
if(isprime[i])
{
a[p++]=i;
for(int j=i*2;j<=;j+=i)
isprime[j]=0;
}
}
return p;
}
3.快速幂取模
int qumo(int a,int b,int c)
{
int ans=1;
a=a%c;
while(b>0)
{
if(b%2==1)
ans=(ans*a)%c;
b/=2;
a=(a*a)%c;
}
return ans;
}
相关文章推荐
- HDOJ(HDU) 2138 How many prime numbers(素数-快速筛选没用上、)
- HDU-1019-Least Common Multiple( 最大公约数 && 最小公倍数 && GCD )
- 最大公约数的快速求法
- Python入门练习0005:输出最大公约数 & 最小公倍数
- 筛选素数空间压缩(数论)&& Double Happiness
- SICP学习笔记:最大公约数和素数检测
- 素数表的快速建立,合数分解,1-2^31内某个长度小于10w的区间素数筛选的三个模板及解析
- algorithm@ Sieve of Eratosthenes (素数筛选算法) & Related Problem (Return two prime numbers )
- 数论(1):最大公约数和最小公倍数(Gcd&Lcm)
- HDU 1286 找新朋友 素数筛选法求公约数
- 素数筛选与最大质因子
- 快速幂。素数筛选。辗转相除。
- HDOJ(HDU) 2138 How many prime numbers(素数-快速筛选没用上、)
- 埃氏筛法(快速筛选n以内素数的个数)
- 快速的求出两个正整数的最小公倍数以及最大公约数
- HDOJ/HDU 2710 Max Factor(素数快速筛选~)
- ACdream 1112 Alice and Bob (博弈&&素数筛选优化)
- Java面试题分析--求解素数、求解最大公约数
- 快速筛选法求1到100的素数
- 最大公约数的快速求法