「 「 「数学基础 」 」 」第 2 2 2章 质数和约数
目录:
A.线性筛素数
B.质数距离
C.不定方程
D.反素数
E.余数之和
A . A. A. 例题 1 1 1 线性筛素数
分析:
直接欧拉筛就行了
CODE:
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<iostream>
using namespace std;
typedef long long ll;
const int N=6e6+5;
int n,q,prime[N],tot;
bool isprime[100000005];
void Prime(int x)
{
isprime[1]=0;
for(int i=2;i<=n;i++)
{
if(isprime[i])
prime[++tot]=i;
for(int j=1;j<=tot&&i*prime[j]<=n;j++)
{
isprime[i*prime[j]]=0;
if(i%prime[j]==0)
break;
}
}
}
int main()
{
scanf("%d%d",&n,&q);
memset(isprime,1,sizeof(isprime));
Prime(n);
while(q--)
{
int k;
scanf("%d",&k);
printf("%d\n",prime[k]);
}
return 0;
}
B . B. B. 例题 2 2 2 质数距离
分析:
在区间内筛出素数 然后依题意判断情况
找的时候就枚举就行了
CODE:
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<iostream>
using namespace std;
typedef long long ll;
const int N=1e6+5,M=(1<<17)+10;
ll l,r,tot,prime[N],prime2[N];
bool isprime[M],isprime2[N]