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


  农夫二月有三个田地,里面种着土豆。他从第一个田地收获了x个土豆,从第二个田地收获了y土豆,但尚未从第三个田野收获土豆。 Feb非常迷信,他相信,如果他从这三个田间收获的马铃薯总和是质数,他将获得可观的利润。请为他计算最小的马铃薯数量,以帮助他,如果从第三个田地中收获马铃薯,那么马铃薯的总数量将成为最佳数量。第三田应至少收获一个马铃薯。
  
  输入值
  输入的第一行包含一个整数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;
                }
            }
        }
    }
}


当我在PC上运行该代码时,它工作得很好,但是当我将其提交到竞赛网站时,该评分员表示我的答案不正确。

您能告诉我我缺少哪些特殊情况吗?

最佳答案

首先,输入的显示方式几乎不会引起误解。我想输入应该看起来像

输入:
2
1 3
4 3

和输出应该看起来像
1个
4

您提交的代码正在检查最少的案件。

回答以下问题应有助于您阐明问题


为什么只将变量结果与3,5,7进行比较,其中结果也可以是101(即质数)。
要检查结果是否为质数,为什么只将结果除以2,3,5,7?
例如:169不是素数,并且不能被2,3,5,7中的任何一个整除。
(在所有三个领域中)2月最多可收获多少马铃薯?
如何检查数字是否为质数。

10-08 17:29