求助一道编写方法判断超级素数的题目!
题目:超级素数的另一种概念:如果2位数素数去掉高位数字后是1位数素数,则该数是超级素数;m(m>1)位超级素数去掉最高位后是m-1位超级素数。
编写类a.A,添加方法static boolean isSuperPrime(int n),如果n是超级素数则返回true,否则返回false。
{:10_269:}感谢! import java.lang.Math;
import java.util.Scanner;
public class A {
public static void main(String[] args) {
int num;
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数字:");
num = sc.nextInt();
sc.close();
if (isSuperPrime(num)){
System.out.println("是超级素数");
}
else{
System.out.println("不是超级素数");
}
}
static boolean isSuperPrime(int n){
int i=1,flag=0;
while (true){
if (n%i == n){
break;
}
i*=10;
flag++;
}
if(isPrime((int)(n%(Math.pow(10, (flag - 1)))))){
return true;
}
else{
return false;
}
}
static boolean isPrime(int n){
if (n < 1){
System.out.println("error");
}
if (n == 1){
return true;
}
if (n%2 == 0){
return false;
}
for (int i = 2; i < n/2;i++){
if (i%2==0){
continue;
}
if (n%i == 0){
return false;
}
}
return true;
}
}
本帖最后由 伍陆柒5678 于 2021-1-5 21:41 编辑
step1 : 先判断这个n是不是素数
Case1 : 不是直接返回false
Case2 : 是素数,再判断减一位是不是素数(用 / 10得出的结果判断,这是减最低位,如果减最高位,先去求有多少位,然后取10余数相加这种方式)
step2 : 写一个helper function判断是不是素数
用一个for loop, i 从 2 一直到 根号 n(不需要全部判断,节约时间), 每次加一,在每次循环里,判断 % i 是不是得 0, 得0的不是素数,不得0的返回true
本帖最后由 伍陆柒5678 于 2021-1-7 11:01 编辑
public class A{
public static boolean isSuperPrime (int n) {
if (n <= 10) {
return false;
}
if (!isPrime(n)) {
return false;
}
int mul = 0;
int newInput = 0;
while (n / 10 != 0) {
multiple = mul * 10;
mul++;
if (multiple == 0) {
newInput += n % 10;
} else {
newInput += (n % 10) * mutiple;
}
n = n / 10;
}
if (!isPrime(newInput)) {
return false;
}
return true;
}
private static boolean isPrime (int n) {
if (n < 2) {
return false;
}
if (n == 2) {
return true;
}
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
}
class Prime{
public static boolean isSuperPrime(int n){
String str=String.valueOf(n);
String str1=str.substring(1);
int num=Integer.parseInt(str1);
System.out.println("去掉最高位:"+num);
return isPrime(num);
}
public static boolean isPrime(int n){
if(n<0||n==1||n==0){
return false;
}
for(int i=2;i<=Math.sqrt(n);i++){
if(n%i==0){
return false;
}
}
return true;
}
}
页:
[1]