输入一个整数
。保证
是偶数。
第一行输出一个整数
,代表满足条件的素数对中的较小者。
第二行输出一个整数
,代表满足条件的素数对中的较大者。
20
7 13
4
2 2
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int num = scanner.nextInt(); for (int i = num/2; i >= 1 ; i--) { if(isTrue(i)&&isTrue(num-i)){ System.out.println(i); System.out.println(num-i); return; } } } public static boolean isTrue(int n){ if(n<=3) return true; if(n%2==0||n%3==0) return false; for (int i = 6; i <= n/2; i+=6) { if(n%(i-1)==0||n%(i+1)==0) return false; } return true; } }
import java.util.Scanner; import java.util.TreeSet; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int t = in.nextInt(); TreeSet<Integer> primes = build(t); int a; for(a = t/2; a>1; a--){ if (primes.contains(a) && primes.contains(t-a)) { break; } } System.out.println(a); System.out.print(t-a); } static TreeSet<Integer> build(int n) { TreeSet<Integer> result = new TreeSet<>(); result.add(2); bloop: for (int i = 3; i <= n; i++) { int to = (int) (Math.sqrt(i) + 0.5); for (int e : result) { if (e > to) { break; } if (i % e == 0) { continue bloop; } } result.add(i); } return result; } }
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int m1 = n / 2; int m2 = n / 2; while( !isPrime(m1) || !isPrime(m2)){ m1--; m2++; } System.out.println(m1); System.out.println(m2); } public static boolean isPrime(int n){ for(int i = 2; i <= n / 2; i++){ if(n % i == 0) return false; } return true; } }
import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNextInt()){ int[] ary = new int[1000]; int num = sc.nextInt(); int count = 0; for(int i = 2;i < num;i++){ //1不算质数 if(isPrime(i)){ //如果是质数,从0位置开始依次放进数组 ary[count] = i; count++; } } int min = ary[count-1]; int m = 0, n = 0; f1:for(int i = 0;i < count;i++){ //直接穷举,我之前是用1/2处开始一左一右寻找,但是示例118竟然两个都在右边, //与其这样一个一个面对奇怪的示例,不如直接穷举 for(int j = 0;j < count;j++){ if((num == ary[i] + ary[j]) && (Math.abs(ary[i] - ary[j]) < min)){ m = ary[i]; n = ary[j]; min = Math.abs(ary[i] - ary[j]); } } } System.out.println(m); System.out.println(n); } sc.close(); } public static boolean isPrime(int num){ //判断是否为质数 for(int i = 2;i < num;i++){ if(num % i == 0){ return false; } } return true; } }
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int num = in.nextInt(); // 偶数 if (num % 2 == 0) { int m = num / 2 ; int m1 = m; int m2 = m; while (isTrue(m1) || isTrue(m2)) { m1--; m2++; } System.out.println(m1); System.out.println(m2); } } private static boolean isTrue(int num) { boolean r = false; for (int i = 2; i < num; i++) { if (num % i == 0) { r = true; break; } } return r; } }
import java.util.Scanner; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String line = br.readLine(); int number = Integer.parseInt(line); // 如果一个数的两个素数对差值最小,这两个数接近number/2,所以从number/2开始循环,找到就退出循环 for (int i = number / 2; i > 1; i--) { if (isPrime(i) && isPrime((number - i))) { System.out.println(i); System.out.println(number - i); break; } } } /** * 判断一个数是否位素数 * * @param number * @return */ private static boolean isPrime(int number) { for (int i = 2; i <= Math.sqrt(number); i++) { if (number % i == 0) { return false; } } return true; } }
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 /*while (in.hasNextInt()) { // 注意 while 处理多个 case int a = in.nextInt(); int b = in.nextInt(); System.out.println(a + b); }*/ int n = in.nextInt(); int a = n/2; int b = n/2; while(a>=2 && b<n){ if(prim(a) && prim(b)){ System.out.println(a); System.out.println(b); break; }else{ a--; b++; } } } public static boolean prim(int num){ for(int i = 2 ; i<num ; i++){ if(num%i == 0){ return false; } } return true; } }
import java.util.Scanner; import java.io.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) throws Exception{ //素数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数 BufferedReader buf = new BufferedReader(new InputStreamReader(System.in)); String str = null; while((str=buf.readLine())!=null){ int num=Integer.parseInt(str); int sub = Integer.MAX_VALUE; //保存两个质数之间的差值 int[] res = new int[2]; for(int i=2;i<=num/2;i++){ if(isPrime(i)==true&&isPrime(num-i)==true){ if(num-2*i<sub) sub = num-2*i; res[0] = i; res[1] = num-i; } } System.out.println(res[0]); System.out.println(res[1]); } } public static boolean isPrime(int num){ //判断一个数是否为质数(素数) for(int i=2;i<=num/2;i++){ if(num%i==0) return false; } return true; } }
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNextInt()) { // 注意 while 处理多个 case int a = in.nextInt(); int b = a/2; for(int i = b; i > 0; i--) { //从中位数开始判断,减少循环次数 if(check(i) && check(a-i)) { System.out.println(i); System.out.println(a-i); break; } } } } public static boolean check(int num) { for(int i = 2; i <= Math.sqrt(num); i++) { if(num % i == 0) { return false; } } return true; } }
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int sum = in.nextInt(); for (int i = sum / 2; i < sum; i++) { if (isPrime(i) && isPrime(sum - i)) { System.out.println(sum - i); System.out.println(i); return; } } } public static Boolean isPrime(Integer x) { if (x < 2) return true; for (int i = 2; i <= Math.sqrt(x); i++) { if (x % i == 0) return false; } return true; } }
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNext()) { // 注意 while 处理多个 case int k = in.nextInt(); int a = k/2; int b = k/2; while(a>0){ if(isPrime(a)&&isPrime(b)){ break; } a--; b++; } System.out.println(a); System.out.println(b); } } public static boolean isPrime(int n){ for(int i=2;i<n;i++){ if(n%i==0){return false;} } return true; } }
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { private static boolean isPrimeNum(int n){ for(int i = 2;i <= Math.sqrt(n);i++){ for(int j = 2;j <= n/2;j++){ if(i * j == n){ return false; } } } return true; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int ret1 = n/2; int ret2 = n/2; while(!isPrimeNum(ret1) || !isPrimeNum(ret2)){ while(!isPrimeNum(ret1)){ ret1--; } while(!isPrimeNum(ret2)){ ret2++; } if(ret1+ret2 > n){ ret1--; }else if(ret1+ret2 < n){ ret2++; }else{ break; } } System.out.println(ret1); System.out.println(ret2); } }让两个数都从n/2的位置出发,一个向下递减找素数,一个向上递增找素数,当两个数都是素数的时候,判断它们的和是否等于n,如果它们的和大于n,就让向下递减的数继续向下递减找更小的素数;如果它们的和小于n,就让向上递增的数继续向上递增找更大的素数。