题目传送门
基础题,此题有\(3\)种解法我不会欧拉筛
\(O(52n):\)
枚举\(2\sim n\div2\),判断是否x%i==0
即可。
\(Code:\)
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
bool ispro(int x){
for(int i=2;i<=x/2;i++){
if(x%i==0){
return 0;
}
}
return 1;
}
int main(){
for(int i=65;i<=90;i++){
if(ispro(i)){
cout<<i<<" "<<char(i)<<endl;
}
}
for(int i=97;i<=122;i++){
if(ispro(i)){
cout<<i<<" "<<char(i)<<endl;
}
}
return 0;
}
\(O(52\sqrt n):\)
观察发现如果\(n\bmod i=0\),则\(n\bmod (n\div i)=0\)
所以可以只从\(2\)枚举到\(\sqrt n\)
\(Code:\)
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
bool ispro(int x){
for(int i=2;i<=sqrt(x);i++){
if(x%i==0){
return 0;
}
}
return 1;
}
int main(){
for(int i=65;i<=90;i++){
if(ispro(i)){
cout<<i<<" "<<char(i)<<endl;
}
}
for(int i=97;i<=122;i++){
if(ispro(i)){
cout<<i<<" "<<char(i)<<endl;
}
}
return 0;
}
\(O(366):\)
可以用埃式筛解决。
核心:枚举\(2\sim n\),如果之前没标记它,则标记\(i+i\sim n\)的\(i\)的倍数。
\(Code:\)
#include<iostream>
using namespace std;
int a[131];
#include<iostream>
using namespace std;
int a[131];
void shai(int n){
a[0]=a[1]=1;
for(int i=2;i<=n;i++){
if(a[i]==0){
for(int j=i*2;j<=n;j+=i){
a[j]=1;
}
}
}
}
int main(){
shai(122);
for(int i=65;i<=90;i++){
if(!a[i]){
cout<<i<<" "<<char(i)<<endl;
}
}
for(int i=97;i<=122;i++){
if(!a[i]){
cout<<i<<" "<<char(i)<<endl;
}
}
return 0;
}