/* 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,请完成函数,实现上述功能。
答题说明
- 可额外编写其它的函数,然后lucky调用你编写的其它函数返回结果值;
- 限时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);
}
}
}
/* 如果一个数各个数位上的数字之和是质数,并且各个数位上的数字的平方和也是质数,则称它为幸运数。
* 给定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);
}
}
}