九度oj 素数 1047,1163,1040,1140

来源:互联网 发布:收获日2优化 编辑:程序博客网 时间:2024/06/06 16:31

1047题目:

http://ac.jobdu.com/problem.php?pid=1047

#include <iostream>#include <stdio.h>#include <string.h>#include <algorithm>#include <math.h>#include <stack>#include <queue>#define ISYEAP(x) x%100!=0 && x%4==0 || x%400==0 ? 1:0 using namespace std;bool judge(int a){    if(a<=1)      return false;  int sqr=(int)sqrt(a)+1;  for(int i=2;i<=sqr;i++){     if(a%i==0)       return false;  }  return true;}int main(){  int n;  while(cin>>n){     puts(judge(n)? "yes" : "no");  }} /**************************************************************    Problem: 1047    User: zhouyudut    Language: C++    Result: Accepted    Time:0 ms    Memory:1532 kb****************************************************************/
<=1的数,都要考虑进去

1163题目:

http://ac.jobdu.com/problem.php?pid=1163

#include <iostream>#include <stdio.h>#include <string.h>#include <algorithm>#include <math.h>#include <stack>#include <queue>#define ISYEAP(x) x%100!=0 && x%4==0 || x%400==0 ? 1:0 using namespace std;bool prime[10010];//素数void filter(int t){  int temp;  for(int i=2;i<=10000;i++){      temp=t*i;    if(temp>10000)      break;    prime[temp]=false;  }}int main(){  for(int i=2;i<=10000;i++)    prime[i]=true;   int sqr=(int)sqrt(10000)+1;  for(int i=2;i<=sqr;i++){    if(prime[i]==false)      continue;    filter(i);  }  int n;  int flag=0;  while(cin>>n){      flag=0;    for(int i=11;i<n;i+=10){      if(i>=n)       break;      if(prime[i]==true){        if(flag==0)         {             cout<<i;             flag++;         }         else{           cout<<' '<<i;         }      }    }    if(flag==0)      cout<<"-1";    cout<<endl;  }} /**************************************************************    Problem: 1163    User: zhouyudut    Language: C++    Result: Accepted    Time:0 ms    Memory:1528 kb****************************************************************/
筛选法,

1163题目:

http://ac.jobdu.com/problem.php?pid=1163

#include <iostream>#include <stdio.h>#include <string.h>#include <algorithm>#include <math.h>#include <stack>#include <queue>#define ISYEAP(x) x%100!=0 && x%4==0 || x%400==0 ? 1:0 using namespace std;bool prime[10010];//素数void filter(int t){  int temp;  for(int i=2;i<=10000;i++){      temp=t*i;    if(temp>10000)      break;    prime[temp]=false;  }}int main(){  for(int i=2;i<=10000;i++)    prime[i]=true;   int sqr=(int)sqrt(10000)+1;  for(int i=2;i<=sqr;i++){    if(prime[i]==false)      continue;    filter(i);  }  int n;  int flag=0;  while(cin>>n){      flag=0;    for(int i=11;i<n;i+=10){      if(i>=n)       break;      if(prime[i]==true){        if(flag==0)         {             cout<<i;             flag++;         }         else{           cout<<' '<<i;         }      }    }    if(flag==0)      cout<<"-1";    cout<<endl;  }} /**************************************************************    Problem: 1163    User: zhouyudut    Language: C++    Result: Accepted    Time:0 ms    Memory:1528 kb****************************************************************/
1040题目:

http://ac.jobdu.com/problem.php?pid=1040

这题挺有意思的,问第几个素数是?

跑数据得出2~100000,大概有9000多素数,AC程序没敢直接用100000,用的是200000,素数大概有17000多。蛮好玩的。

#include <iostream>#include <stdio.h>#include <string.h>#include <algorithm>#include <math.h>#include <stack>#include <queue>#define ISYEAP(x) x%100!=0 && x%4==0 || x%400==0 ? 1:0 using namespace std;bool prime[200010];//素数int figure[10020];void filter(int t){  int temp;  for(int i=2;i<=200000;i++){      temp=t*i;    if(temp>200000)      break;    prime[temp]=false;  }}int main(){  for(int i=2;i<=200000;i++)    prime[i]=true;   int sqr=(int)sqrt(200000)+1;  int count=0;  for(int i=2;i<=sqr;i++){    if(prime[i]==false)      continue; //   count++;    filter(i);  }  //cout<<"count="<<count<<endl;  for(int i=2;i<=200000;i++)  {      if(count>10000)         break;      if(prime[i]==true){       count++;       figure[count]=i;      }  }//  cout<<"count="<<count<<endl;  int n;  while(cin>>n){      cout<<figure[n]<<endl;  }} /**************************************************************    Problem: 1040    User: zhouyudut    Language: C++    Result: Accepted    Time:10 ms    Memory:1752 kb****************************************************************/
1440题目:

http://ac.jobdu.com/problem.php?pid=1440

#include <iostream>#include <stdio.h>#include <string.h>#include <algorithm>#include <math.h>#include <stack>#include <queue>#define ISYEAP(x) x%100!=0 && x%4==0 || x%400==0 ? 1:0 using namespace std;bool prime[200010];//素数int figure[10020];void filter(int t){  int temp;  for(int i=2;i<=200000;i++){      temp=t*i;    if(temp>200000)      break;    prime[temp]=false;  }}int main(){  for(int i=2;i<=200000;i++)    prime[i]=true;   int sqr=(int)sqrt(200000)+1;  int count=0;  for(int i=2;i<=sqr;i++){    if(prime[i]==false)      continue; //   count++;    filter(i);  }  //cout<<"count="<<count<<endl;  for(int i=2;i<=200000;i++)  {      if(count>10000)         break;      if(prime[i]==true){       count++;       figure[count]=i;      }  }//  cout<<"count="<<count<<endl;  int n; // count=0;  while(cin>>n,n){      count=0;      int sq=n/2;      int temp;      for(int i=1;i<=200000;i++)      {          if(figure[i]>sq)            break;          temp=n-figure[i];          if(prime[temp]==true)           count++;      }      cout<<count<<endl;  }} /**************************************************************    Problem: 1440    User: zhouyudut    Language: C++    Result: Accepted    Time:10 ms    Memory:1752 kb****************************************************************/






0 0
原创粉丝点击