Jeanny
寂兮,寥兮,独立不改,周行而不殆
#include<bits/stdc++.h>
using namespace std;
define N 1000000
int b[1000005], n, cnt;
int main(){
	scanf("%d",&n);
	for(int i = 2; i*i <= N; i++){
		for(int j = i*i; j <= N; j += i)
			b[j] = 1;
	}
	for(int i = 2; i <= N; i++)
		if(b[i] == 0){
			cnt++;
			if(cnt == n) cout<<i<<endl;
		}
			
	return 0; 
} 

线性

void init(int n) {
  for (int i = 2; i <= n; ++i) {
    if (!vis[i]) {
      pri[cnt++] = i;
    }
    for (int j = 0; j < cnt && 1ll * i * pri[j] <= n; ++j) {//对于当前倍数,一旦大了就退出。
      vis[i * pri[j]] = 1;
      if (i % pri[j] == 0)  break;
    }
  }
}
        // i % pri[j] == 0
        // 换言之,i 之前被 pri[j] 筛过了
        // 由于 pri 里面质数是从小到大的,所以 i乘上其他的质数的结果一定会被
        // pri[j]的倍数筛掉,就不需要在这里先筛一次,所以这里直接 break
        // 掉就好了

快速幂

#include<bits/stdc++.h>
using namespace std;
int n,m,ans = 1;
int pow(int x, int y){
	int t = x;
	while(y){
		if(y & 1)
			ans = ans * t;
		t = t*t;
		y >>= 1;
	}
	return ans;
}
int main(){
	scanf("%d%d",&n,&m);
	cout<<pow(n,m)<<endl;
	return 0;
}
posted on 2023-05-13 10:24  Jeanny  阅读(21)  评论(0)    收藏  举报