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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值