一个素数,依次从最高位去掉一位,两位……若得到的都是素数,且各数字不为0,则称为超级素数。
代码如下:
import scala.math
object Prime{
def main(args: Array[String]):Unit={
for(i <- 1 to 9999)
if(depart(i)) println(i)
}
def isPrime(n:Int):Boolean={ //此方法用于判断素数
if(n<=1) return false
for(i <- 2 to math.sqrt(n).toInt){
if(n%i==0) return false
}
true
}
def length(n:Int):Int={ //此方法用于判断任意数的位数
var sum:Int = 0
var tr = n
while(tr>0){
tr = tr / 10
sum = sum + 1
}
sum
}
def depart(m:Int):Boolean={ //此方法用于判断取走高位后是否为素数
var n = length(m)
var tr = m
while(isPrime(tr)&&n>0){
n = n - 1
var x = power(n);
var k = (tr/x)* x
tr = tr - k
if(length(tr)!=n) return false
}
if(n==0) return true
false
}
def power(n:Int):Int={ //此方法用于计算10的幂次方
var mi = 1
for(i <- 1 to n) mi = mi * 10
mi
}
}
ps:用pow()函数计算10的幂次方,因为pow()返回值类型是double,把它强行转换为Int型可能会得到不正确的值。