可截短素数
数字 3797 有一个有趣的性质:它自己是一个素数,同时我们可以从左至右逐步截断这个数
字,得到 3797,797,97 和 7,它们也都是素数。同样,我们也可以从右至左逐步截断这个
数字,得到 3797,379,37 和 3 也都是素数。求仅有的十一个从左至右和从右至左都可以截
短的素数之和(注:2,3,5 和 7 不被认为是可截短素数)。
答案:748317
思路:1、判断是否是素数 2、截断
运用substring
substring(int beginIndex):从索引beginIndex开始,截到字符串末尾
substring(int beginIndex, int endIndex):从beginIndex开始,截到endIndex-1结束
代码如下:
public static boolean prime(int n){ if(n==1) return false; for(int i=2;i*i<=n;i++) if(n%i==0) return false; return true; } public static boolean num(int n){ if(!prime(n)) return false; String s=String.valueOf(n); String s1,s2; for(int i=1;i
程序运行结果:
另一种做法:
private static boolean isTruncatablePrime(int n) { // 从左往右截 for (long i = 10; i <= n; i *= 10) { if (!isPrime(n % (int)i)) return false; } // 从右往左截 for (; n != 0; n /= 10) { if (!isPrime(n)) return false; } return true; }