1.数论:
质数:针对从2开始的整数来定义的。在大于1的整数中,如果只包含1和本身这两个约数,就被称为质数或者叫素数。
(1)质数的判定:试除法
#include <iostream>
#include <algorithm>
using namespace std;
bool is_prime(int n)
{
if(n<2) false;
for(int i=2;i<n;i++) //暴力 时间复杂度O(n)
{
if(n%i==0)
return false;
}
return true;
}
//
bool is_prime(int n)
{
if(n<2) false;
for(int i=2;i <= n/i;i++) //优化 时间复杂度O(sqrt(n))
{
if(n%i==0)
return false;
}
return true;
}
int main()
{
return 0;
}
2.分解质因数:试除法
n中最多只包含一个大于sqrt(n)的质因子
#include <iostream>
#include <algorithm>
using namespace std;
void divide(int n)
{
for(int i=2;i <= n/i;i++)
{
if(n%i == 0)
{
int s = 0;
while(n%i == 0)
{
n/=i;
s++;
}
cout<<i<<" "<<s<<endl;
}
}
if(n>1) cout<<n<<" "<<1<<endl;
cout<<endl;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL), cout.tie(NULL);
int n;
cin>>n;
while(n--)
{
int x;
cin>>x;
divide(x);
}
return 0;
}
3.筛质数
//埃式筛法
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1000010;
int primes[N], cnt;
bool st[N];
void find_primes(int n)
{
for(int i=2;i<=n;i++)
{
if(!st[i])
{
primes[cnt++]=n;
for(int j=i+i;j<=n;j+=i) st[j] = true; //放到里面优化
}
}
cout<<cnt;
}
int main()
{
int n;
cin>>n;
find_primes(n);
return 0;
}