在不使用String的情况下检查整数是否为圆形素数

时间:2016-11-05 00:02:12

标签: java int primes

我必须编写一个布尔方法,检查数字n是否为循环素数,仅使用整数计算,因此不使用字符串。我写了另外两个必须包含的方法。

boolean isPrime(int n) {
    if (n < 1) {
        return false;
    } else if (n == 1 || n == 2) {
        return true;
    } else if (n % 2 != 0) {
        for (int i = 3; i < n; i+=2) {
            if (n % i == 0) {
                return false;
            }
        }
        return true;
    } else {
        return false;
    } 
}

检查数字是否为素数。

int largestPowerOfTen(int n) {
    for (int i = 1; i < n * 10; i*=10) {
        if (n / i == 0) {
            return i / 10;
        }
    }
    return 1;
}

这将返回该数字中最大的十个幂。例如,23将返回10,704将返回100,等等。

我有想法将每个数字放入一个数组并从那里移动数字,但我被困在移动部分。

boolean isCircularPrime(int n) {
    ArrayList<Integer> k = new ArrayList<Integer>();
    int i = 0;

    while (n != 0) {
        k.add(n % 10);
        n /= 10;
        i++;
    }
    //???
}

那么如何移动数字?

2 个答案:

答案 0 :(得分:0)

假设“圆形素数”是一个数字,它是所有数字旋转的素数...

您不能只旋转数字,因为不会保留零。

首先将数字分解为数组 - 数字的每个数字都是数组的一个元素。使用n % 10查找最后一位数字,然后n /= 10查找n == 0

创建一个方法,使用指定的起始索引从数组生成数字。这是问题的症结所在,这里有一些代码:

private static int generate(int[] digits, int index) {
    int result = 0;
    for (int i = 0; i < digits.length; i++) {
        result = result * 10 + digits[(index + i) % digits.length];
    }
    return result;
}

然后遍历每个可能的数字起始索引并检查它是否为素数。

我留给读者的剩余代码......

答案 1 :(得分:0)

import java.util.Scanner;
class CircularPrime
{
    public boolean prime(int n)
    {
        int lim=n,count=0;
        for(int i=1;i<=lim;i++)
        {
            if(n%i==0)count++;
        }
        if(count==2)
        return true;
        else
        return false;
    }
    public int circlize(int n)
    {
        int len,x,y,circle;
        len=(""+n).length();
        x=n/(int)Math.pow(10,len-1);
        y=n%(int)Math.pow(10,len-1);
        circle=(y*10)+x;
        return circle;
        /**
        Another way using String
        String str = Integer.toString(n);
        String arr = str.substring(1)+str.charAt(0);
        int a = Integer.parseInt(arr);
        return a;
        **/
    }
    public void check(int n)
    {
        int a=n;
        boolean flag=true;
        System.out.println("OUTPUT:");
        do
        {
            if(!(prime(a)))
            {
                flag=false;
                break;
            }
            a=circlize(a);
            System.out.println(a);
        }while(a!=n);
        if(flag)System.out.println(n+" IS A CIRCULAR PRIME");
        else System.out.println(n+" IS NOT A CIRCULAR PRIME");
    }
    public static void main(String ar[])
    {
        CircularPrime obj = new CircularPrime();
        Scanner  sc = new Scanner(System.in);
        System.out.print("Enter a number: ");
        int n=sc.nextInt();
        obj.check(n);
    }
}