1.求最大公约数
int gcd(int a, int b){
return b == 0 ? a : gcd(b, a % b);
}
2.求最小公倍数
int lcm(int a, int b){
return a * (b / gcd(a, b));
}
3.a的n次幂
//a的n次幂
long long solve(long long a, long long n){
long long x = 1;
for(int i = 0; i < n; ++i){
x *= a;
}
return x;
}
4.求a的n次幂,对p取模
//a的n次幂 对p取模
//a%p b%p (a+b)%p = (a%p+b%p)%p
//(a*b)%p = ((a%p)*(b%p))%p
int solve(int a, int n, int p){
int x = 1;
for(int i = 0; i < n; ++i){
x = (x * a) % p;
}
return x;
}
//更进一步的解法:用分治法
5.求素数
第100002个素数是多少?
#include <iostream>
using namespace std;
const int maxn = 10000010;
bool p[maxn];//false表示为素数
int prime[maxn];
int pnum = 0;
//求素数
//埃氏筛法求素数
void getprime(){
for(int i = 2; i < maxn; ++i){
if(p[i] == false){
prime[pnum++] = i;
for(int j = i + i; j < maxn; j += i){
p[j] = true;
}
}
}
}
void printprime(){
for(int i = 0; i < pnum; ++i){
cout<<prime[i]<<" ";
}
}
int main(int argc, char** argv) {
int k = 100002;
getprime();
cout<<prime[k - 1]<<endl;
return 0;
}
6.买不到的数目
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
const int maxn = 1010;
const int maxm = 10000010;
int p[maxm];
int gcd(int a, int b){
return b == 0 ? a : gcd(b, a % b);
}
int main(int argc, char** argv) {
// fstream cin("a.txt");
int a,b;
int n = 0;
cin >> a >> b;
int mink = min(a, b);
for(int i = 0; i < maxn; ++i){
for(int j = 0; j < maxn; ++j){
p[a * i + b * j] = 1;
}
}
for(int i = 0; i < maxm; ++i){
if(p[i] == 1){
n++;
if(n >= mink){
cout<< i - mink<<endl;
break;
}
}
else{
n = 0;
}
}
return 0;
}