我必须编写一个布尔方法,检查数字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++;
}
//???
}
那么如何移动数字?
答案 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);
}
}