判断一个数是否为素数
int isprime(int a)
{
if(a<=1) return 0;
if(a==2) return 0;
if(a%2==0) return 0;
for(int i=3;i<sqrt(a)+1;i++)
{
if(a%i==0) return 0;
}
return 1;
}
素数筛
const int maxn=1000;
int prime[maxn];//素数的存放 ,最后可以在这里找需要的素数
bool is_prime[maxn];
int sieve(int n){
int p = 0;
for(int i = 0; i <= n; ++i)
is_prime[i] = true;
is_prime[0] = is_prime[1] = false;
for (int i = 2; i <= n; ++i){ // 注意数组大小是n
if(is_prime[i]){
prime[p++] = i;
for(int j = i + i; j <= n; j += i) // 轻剪枝,j必定是i的倍数
is_prime[j] = false;
}
}
return p; // 返回素数个数
}
快速幂
//迭代写法
//底数,质数,取模运算
LL binarypow2(LL a, LL b, LL m)
{
LL ans = 1;
while (b > 0)
{
if (b & 1)
{
ans = ans * a % m;
}
a = a * a % m;
b >>=1;
}
return ans;
}
//只要底数和指数
long long fastPower(long long base, long long power) {
long long result = 1;
while (power > 0) {
if (power & 1) {//此处等价于if(power%2==1)
result = result * base % 1000;
}
power >>= 1;//此处等价于power=power/2
base = (base * base) % 1000;
}
return result;
}