数学模块第一章打卡题,质数模块,该部分介四种方法来解决三道关于质数的题目,分别是质数判定、分解质因数以及筛质数,感兴趣的可以看看。
时间复杂度 O(sqrt(n))
public static boolean is_prime(int n) {
if(n < 2){
return false;
}
for(int i = 2;i <= n / i;i++){
if(n % i == 0){
return false;
}
}
return true;
}
时间复杂度 O(log n)- O(sqrt(n))
void divide(int x){
for(int i = 2; i <= x/ i; i++){
if(x % i== 0){
int s = 0;
while(x % i == 0){
x /= i;
s++;
}
cout << i << ' ' << s<<endl;
}
}
if(x > 1){
cout << x << ' ' << 1 <<endl;
}
cout<<endl;
}
时间复杂度O(nloglogn)
const int N = 1000010;
int primes[N], cnt; // primes[]存储所有素数
bool st[N]; // st[x]存储x是否被筛掉
void get_primes(int n){
for(int i = 2;i <= n; i++){
if(st[i]) continue;
primes[cnt++] = i;
for(int j = i + i; j <= n;j+=i){
st[j] = true;
}
}
}
时间复杂度 O(lnn)
const int N = 1000010;
int primes[N], cnt; // primes[]存储所有素数
bool st[N]; // st[x]存储x是否被筛掉
void get_primes(int n){
for(int i = 2; i<= n;i++){
if(!st[i]){
primes[cnt++]=i;
}
for(int j = 0; primes[j] <= n /i; j++){
st[primes[j] * i] = true;
if(i % primes[j] == 0){
break;
}
}
}
}
阅读量:1581
点赞量:0
收藏量:0