ARTS打卡计划第四周-ALGORITHM
Posted dongqisilent
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ARTS打卡计划第四周-ALGORITHM相关的知识,希望对你有一定的参考价值。
866. 回文素数
求出大于或等于 N
的最小回文素数。
回顾一下,如果一个数大于 1,且其因数只有 1 和它自身,那么这个数是素数。
例如,2,3,5,7,11 以及 13 是素数。
回顾一下,如果一个数从左往右读与从右往左读是一样的,那么这个数是回文数。
例如,12321 是回文数。
package com711; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Solution866 { public int primePalindrome(int N) { List<Integer> list = getPalindrome(N); Collections.sort(list); return list.get(0); } public List<Integer> getPalindrome(int N) { List<Integer> list = new ArrayList<Integer>(); // 10以内的特例 for (int i = N; i < 10; i++) { if (isPrime(i)) { list.add(i); return list; } } int start = getMinStart(N); // 双数的判断 for (int i = (int) Math.pow(10, start); i < 10000; i++) { int num = Integer.parseInt(i + "" + reverse(i)); if (num >= N && isPrime(num) && num < 200000000) { list.add(num); break; } } for (int i = (int) Math.pow(10, start); i < 10000; i++) { for (int j = 0; j <= 9; j++) { int num1 = Integer.parseInt(i + "" + j + reverse(i)); if (num1 >= N && isPrime(num1) && num1 < 200000000) { list.add(num1); return list; } } } return list; } public boolean isPrime(int n) { if (n == 1) { return false; } for (int i = 2; i <= Math.sqrt(n); i++) { if (n % i == 0) { return false; } } return true; } public String reverse(int n) { char[] chars = (n + "").toCharArray(); int len = chars.length; for (int i = 0; i < len / 2; i++) { char temp = chars[i]; chars[i] = chars[len - i - 1]; chars[len - i - 1] = temp; } return new String(chars); } public boolean isHuiWen(int n) { char[] chars = (n + "").toCharArray(); int len = chars.length; for (int i = 0; i < len; i++) { if (chars[i] != chars[len - i - 1]) { return false; } } return true; } public int getMinStart(int n) { String str = n + ""; str = str.substring(0, str.length() / 2); return str.length() / 2; } public static void main(String[] args) { // TODO Auto-generated method stub Solution866 s = new Solution866(); long start = System.currentTimeMillis(); System.out.println(s.primePalindrome(85709140)); long end = System.currentTimeMillis(); System.out.println(end - start); } }
本题最大的困扰是如果直接不找规律遍历的话,你肯定会超时。因此要用最快的方法,找到最近的回文数,去判断。
以上是关于ARTS打卡计划第四周-ALGORITHM的主要内容,如果未能解决你的问题,请参考以下文章