幸运数

/* http://hero.pongo.cn/home/index  --庞果网*/
题目详情

如果一个数各个数位上的数字之和是质数,并且各个数位上的数字的平方和也是质数,则称它为幸运数。

给定x,y,求x,y之间( 包含x,y,即闭区间[x,y])有多少个幸运数。


例如1到20之间有4个幸运数,它们是11,12,14,16,像因为1+1 = 2是质数,1^2 + 1^2 = 2也是质数等等。

给定函数原型,其中1<=x<=y<=1000000000,请完成函数,实现上述功能。


答题说明
  1. 可额外编写其它的函数,然后lucky调用你编写的其它函数返回结果值;
  2. 限时3s,程序运行时间超过3s即挑战失败。

package ccPackage;


/* 如果一个数各个数位上的数字之和是质数,并且各个数位上的数字的平方和也是质数,则称它为幸运数。
 * 给定x,y,求x,y之间( 包含x,y,即闭区间[x,y])有多少个幸运数。
 * 例如1到20之间有4个幸运数,它们是11,12,14,16,像因为1+1 = 2是质数,1^2 + 1^2 = 2也是质数等等。 
 * 给定函数原型,其中1<=x<=y<=1000000000,请完成函数,实现上述功能。 
挑战规则: 
可额外编写其它的函数,然后lucky调用你编写的其它函数返回结果值; 限时3s,程序运行时间超过3s即挑战失败。
 
 *
 * 2013-06-30
 * gaoyq
 */


public class LuckyNum {

//判断一个数字是否为质数
public boolean isPrimeNum(int val)
{
if(val<=1)
return false;

for(int i=2; i<=Math.sqrt(val); i++)
{
//if(val)
if(val % i == 0)
return false;

}

return true;
}

//判断一个数字是否为幸运数
public boolean luckyNum(int val)
{
int tmpVal = 10;
int valLen = 1;
int[] valAry = new int[11];
valAry[0] = val % 10;

while(val >= tmpVal)
{
valAry[valLen] = val / tmpVal % 10; 

tmpVal *= 10;
++valLen;
}

int sumNum = 0;
int powNum = 0;

for(int i=0; i<valLen; i++)
{
// System.out.println(valAry[i]);
sumNum += valAry[i];
powNum += valAry[i]*valAry[i];
}

if(isPrimeNum(sumNum) && isPrimeNum(powNum))
return true;

return false;

}

//借调用
public void luckyNumLoop(int startPos,int endPos)
{
if(startPos > endPos || startPos < 0)
return;

for(int i=startPos;i<=endPos;i++)
{
if(luckyNum(i))
System.out.println(i);
}
}


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cacasi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值