素数题 POJ 水题

 2739:
package poj;
import java.util.Scanner;
public class SumofConsecutivePrimeNumbers {
        public static void main(String[] args) {
         Scanner cin = new Scanner(System.in);
            int value;
               while(cin.hasNext()){
                    value = cin.nextInt();
                   if (value == 0)     System.exit(0);
                  if (value == 2 || value == 3)System.out.println(1);
                      else {
                           int sum=0, num=0;
                                if(isPrime(value)) num++;
                                for(int i = 2; i < value;i++){
                                    if (!isPrime(i)) continue;
                                       for(int j = i;j <= value;j++ ){
                                           if (isPrime(j)) {
                                                        sum += j;
                                                        if(sum == value){
                                                                num++;
                                                           sum =0;
                                                          break;
                                                   }else if(sum >value){
                                                             sum = 0;
                                                         break;
                                                   }
                                                }
                                        }
                                }
                                System.out.println(num);
                 }
                }  
 }
        //判断是否是素数
        private static boolean isPrime(int value){
               for(int i = 2;i<(int)Math.sqrt(value);i++){
                       if(value % i == 0)
                               return false;
            }
                return true;
     }
}

 

2262:
package poj;
import java.util.Scanner;
public class GoldbachConjecture {
  public static void main(String[] args) {
         boolean notPrime[]=new boolean[1000001];
         notPrime[1]=true;
                for(int i = 2;i <= 1000;i++){
                     if(!notPrime[i]){//是素数
                           for(int j = 2 ;i*j<=1000000;j++){
                                 notPrime[i*j]= true;
                             }
                        }
                }
                Scanner cin = new Scanner(System.in);
            while(cin.hasNext()){
                    int n = cin.nextInt();
                   if(n == 0) System.exit(0);
                       int sum=0;
                       int i,j=0;
                       for(i = 2;i<n;i++){
                               boolean flag = false;
                            if(!notPrime[i]){
                                        for(j=n;i+j >= n;j--){
                                            if(!notPrime[j]){
                                                        sum = i + j;
                                                     if(sum == n){
                                                            flag = true;
                                                             break;
                                                   }
                                                }
                                        }
                                        if (flag == true) {
                                              break;
                                   }
                                }
                        }
                        System.out.println(n + " = "+ i +" + "+ j );
             }
        }
}

 

3006:
package poj;
import java.util.Scanner;
public class DirichletTheoremonArithmeticProgressions {
  public static void main(String[] args) {
         boolean notPrime[] = new boolean[1000000];
               notPrime[1]=true;
                for(int i = 2;i<= 1000;i++){
                      if(!notPrime[i]){ //是素数
                          for(int j = 2;i*j<1000000;j++)
                                  notPrime[i*j] = true;
                    }          
         }  
         Scanner cin = new Scanner(System.in);
            int a,d,n;
               while(cin.hasNext()){
                    a = cin.nextInt();
                       d = cin.nextInt();
                       n = cin.nextInt();
                       if( (a==0)&&(d==0)&&(n==0) ) System.exit(0);
                     int value,i=0,j=0;
                       int prime[] = new int[n];
                        while(++i != 0){
                                value = a+ (i-1)*d;
                             if(!notPrime[value])
                                    prime[j++]=value;
                               if(j == n){
                                     System.out.println(prime[--j]);
                                         break;
                          }
                        }
                }
        }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值