PAT乙级

pat1007

2018-09-22  本文已影响0人  hsinsDfy

普通方案:

#include<iostream>

#include<math.h>

using namespace std;

bool isPrime(int n);

int main(){

int cnt=0;

    int n;

    cin>>n;

for(int i=3;i+2<=n;i++)

if(isPrime(i)&&isPrime(i+2))

cnt++;

cout<<cnt;

system("pause");

return 0;

}

bool isPrime(int n){

for(int i=2;i<=sqrt(n);i++){

if(n%i==0)

return false;

}

return true;

}
image

空间换时间:

#include<iostream>

#include<math.h>

using namespace std;

bool isPrime(int n);

int main(){

int a[100001]={0};

int cnt=0;

    int n;

    cin>>n;

for(int i=2;i<=n;i++){

if(a[i]==0){

if(isPrime(i)){

for(int j=2;j*i<=n;j++)

a[j*i]=1;//标记非素数为1

}

else

a[i]=1;

}

}

for(int i=3;i+2<=n;i++)

if(a[i]==0&&a[i+2]==0)

//if(isPrime(i)&&isPrime(i+2))

cnt++;

cout<<cnt;

system("pause");

return 0;

}

bool isPrime(int n){

for(int i=2;i<=sqrt(n);i++){

if(n%i==0)

return false;

}

return true;

}
image
#include<iostream>
#include<math.h>
using namespace std;

bool isPrime(int n);

int main(){
    int a[100001]={0};
    int cnt=0;
    int n;
    cin>>n;
    for(int i=2;i<=n;i++){
        if(a[i]==0){
                if(isPrime(i)){
                    for(int j=2;j*i<=n;j++)
                    a[j*i]=1;//标记非素数为1即素数的倍数们都是非素数
                }
                else
                    a[i]=1;
        }
    }
    for(int i=3;i+2<=n;i++)
        if(a[i]==0&&a[i+2]==0)
            //if(isPrime(i)&&isPrime(i+2))
            cnt++;
    cout<<cnt;
    system("pause");
    return 0;
}

bool isPrime(int n){
    for(int i=2;i<=sqrt(n);i++){
        if(n%i==0)
            return false;
        else return true;//伪素数,导致尽可能多的标记非素数,同时减少判断是否是的运行时间(取模计算比赋值更费时间)
    }
}
图片.png
上一篇下一篇

猜你喜欢

热点阅读