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);
	}

}

  本题最大的困扰是如果直接不找规律遍历的话,你肯定会超时。因此要用最快的方法,找到最近的回文数,去判断。

原文地址:https://www.cnblogs.com/dongqiSilent/p/10847886.html

时间: 2024-07-31 06:16:29

ARTS打卡计划第四周-ALGORITHM的相关文章

ARTS打卡计划第二周-Algorithm

665. 非递减数列  https://leetcode-cn.com/problems/non-decreasing-array/ 给定一个长度为 n 的整数数组,你的任务是判断在最多改变 1 个元素的情况下,该数组能否变成一个非递减数列. 我们是这样定义一个非递减数列的: 对于数组中所有的 i (1 <= i < n),满足 array[i] <= array[i + 1]. class Solution { public boolean checkPossibility(int[]

ARTS打卡计划第四周-Review-构建大规模django应用的一些建议

本周文章来源于https://medium.com/@DoorDash/tips-for-building-high-quality-django-apps-at-scale-a5a25917b2b5,这篇文章还是非常难阅读的.但是其中提到了一些django的实践还是很有借鉴意义. 文章中主要有如下观点 1.非常小心的设计你的apps 如果你不明白如何去设计多个app,你可以保持只有一个app.如果你一定要分成多个app,你必须明确减少他们的依赖.app之间的依赖越少,每个app越容易打成一个微

ARTS打卡计划第四周

Algorithms: https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/ 采用了map的存储,然后移动窗口方式解决此问题,当然看到有个动态规划,一直很难理解. Review: https://www.infoq.cn/article/rAJiubRpi9xSl_LEhI2N 友谊与程序,生活与事业. Tips: c++11 : 1.右值引用 是对临时对象的一种引用,它是在初始化时完成引

ARTS打卡计划第三周-Algorithm

1. 两数之和 提供了2种揭发 public class Solution1 { public int[] twoSum(int[] nums, int target) { int len=nums.length; int[] result = new int[2]; for(int i=0;i<len;i++) { for(int j=i+1;j<len;j++) { if(nums[i]==target-nums[j]) { result[0]=i; result[1]=j; } } }

ARTS打卡计划第6周-ALGORITHM

535. TinyURL 的加密与解密 这题其实是很常见的一个开发场景,短地址的开发.我这里只是分享一种md5的方式,还有其他的生成字符串比较短的hash方式. import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.HashMap; public class Codec { private HashMap<String, String> map =

ARTS打卡计划第十四周

Algorithms: https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/ Review: “How to write a good software design doc” by Angela Zhang https://medium.com/p/66fcf019569c Tips: android log 分类. kernel.radio.event.main这四种log.目前主要用了kernel 和event

ARTS打卡计划第二周-Review

本周review的文章是:https://medium.com/@hakibenita/optimizing-django-admin-paginator-53c4eb6bfca3 改篇文章的题目是:Optimizing Django Admin Paginator,How we finally made Django admin fast for large tables. django分页的时候,大部分时间都会消耗在求count上,本篇文章提到了几点用于提升大表分页的方法: 1.重写默认的分

ARTS打卡计划第一周-Review

本周分享的文章来自于medium的 Testing Best Practices for Java + Spring Apps 这个文章主要讲的是java测试的一些最佳实践 1.避免函数返回void,返回void不利于写单元测试,因为返回void不知道方法执行的内部情况 2.使用有意义的 assertions,可以使用  https://google.github.io/truth/ 类库 3.记得测试异常 4.可以使用变量进行多次测试 5.使用Mockito进行mock测试 原文地址:http

ARTS打卡计划第三周-Tips

本周分享一个好用的小工具,java-faker:https://github.com/DiUS/java-faker,相应的python:https://github.com/joke2k/faker. 使用faker库,可以轻松的造假数据,再也不用担心演示的时候,假数据不好看了. java版本使用很简单,引入依赖: <dependency> <groupId>com.github.javafaker</groupId> <artifactId>javafa