codechef农民feb.Code的角落案件:马铃薯

时间:2015-07-28 19:32:13

标签: java primes

此问题来自在线竞赛网站codechef。它需要计算素数。问题是:

  

Farmer Feb有三个种植土豆的土地。他从第一个田地收获了x土豆,从第二个田地收获了土豆,还没有从第三个田地收获土豆。 2月非常迷信,并且相信如果他从三个领域收获的土豆总数是素数,他将获得巨额利润。请帮他计算一下,如果从第三个田地收获的马铃薯的最小数量将使马铃薯的总和达到最佳状态。应该从第三个田地收获至少一个马铃薯。

     

输入
  输入的第一行包含一个整数T,表示测试用例的数量。每个下一个T行包含由单个空格分隔的2个整数:x和y。

     

输出
  对于每个测试用例,输出一行包含答案。

     

约束

1 ≤ T ≤ 1000
1 ≤ x ≤ 1000
1 ≤ y ≤ 1000
     

实施例

     

输入:

2
1 3
4 3
     

输出:

1
4
     

解释

     

在示例案例1中:农民从第一个田地收获马铃薯,从第二个田地收获3个马铃薯。总和是4.如果他能够从第三个领域收获马铃薯,那将得到总和5,这是素数。因此答案是1(他需要多一个马铃薯才能使收获的马铃薯的总和成为主要原因)。

我这样解决了:

import java.io.*;
import java.util.StringTokenizer;

class java2s {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T=Integer.parseInt(br.readLine());
        while(T-->0) {
            StringTokenizer st=new StringTokenizer(br.readLine());
            int x = Integer.parseInt(st.nextToken());
            int y = Integer.parseInt(st.nextToken());
            int sum = x + y;
            for(int i=1; i<100; i++) {
                int res=sum+i;
                if(res==3 || res==5 || res==7) {
                    System.out.println(i);
                    break;
                }
                else if((res%2)!=0 && (res%3)!=0 && (res%5)!=0 && (res%7)!=0) {
                    System.out.println(i);
                    break;
                }
            }
        }
    }
} 

当我在我的电脑上运行该代码时,它运行得非常好,但当我将其提交给比赛网站时,评分者表示我的答案不正确。

你能告诉我我错过了哪些角落吗?

1 个答案:

答案 0 :(得分:2)

首先,显示输入的方式几乎没有误导性。我猜输入应该看起来像

输入:
2
1 3
4 3

并且输出应该看起来像
1
4个

您提交的代码是检查极少数情况。

回答以下问题可以帮助您解决问题

  1. 为什么只将变量结果与3,5,7进行比较,结果也可以是101,这是一个素数。

  2. 要检查结果是否为素数,为什么仅将结果除以2,3,5,7? 例如:169不是素数,不能被2,3,5,7中的任何一个整除。

  3. feb可以收获的最大马铃薯数量(在所有三个范围内)是多少?

  4. 如何检查数字是否为素数。