两道算法水题

1、编写一个程序:判断一个数是否为质数

(质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。)

 常规方法:

public class Test{
    public static void main(String[] args) {
        System.out.println("请输入一个数");
        Scanner input=new Scanner(System.in);
        int number= input.nextInt();
        System.out.println(isPrime(number));
    }
    public static boolean isPrime(int number){
        for(int i=2;i<number;i++){
            if(number%i==0){
                return false;
            }
        }
        return true;
    }
}

缺点:逐个循环,效率过低

改进思路:

根据此图得出结论:一个整数的一对因子,一定有一个小于等于平方根,有一个大于等于平方根

所以只需判断平方根(包含平方根)之前的数是否取模为0即可,提高效率。

 

改进后:

public class Test{
    public static void main(String[] args) {
        System.out.println("请输入一个数");
        Scanner input=new Scanner(System.in);
        int number= input.nextInt();
        System.out.println(isPrime(number));
    }
    public static boolean isPrime(int number){
        for(int i=2;i<=Math.sqrt(number);i++){
            if(number%i==0){
                return false;
            }
        }
        return true;
    }
}

 

2、编写一个程序:统计一共有多少个水仙花数

自幂数:一个n位自然数等于自身各个数位上数字的n次幂之和

例如:三位数:1^3+5^3+3^3=153

public class Test{
    public static void main(String[] args) {
        int count=0;
        for(int i=100;i<=999;i++){
            //个位
            int ge=i%10;
            //十位
            int shi=i/10%10;
            //百位
            int bai=i/100%10;
            //注意sum的类型要为double,因为pow方法的返回值为double
            double sum=Math.pow(ge,3)+Math.pow(shi,3)+Math.pow(bai,3);
            if(sum==i){
                count++;
            }
        }
        System.out.println("一共有"+count+"个水仙花数");
    }
}

 

思考扩展:为什么没有两位的自幂数

                  统计一共有几个四叶玫瑰数

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值