简单算法题,素数对猜想

本文记录了作者初次接触算法时,通过解决素数对猜想问题来理解算法的重要性。作者最初使用穷举法检查素数,导致超时。后来了解到只需计算到数的平方根即可判断其是否为素数,从而提高了效率。通过这个过程,作者深刻体会到了算法在编程中的价值。
摘要由CSDN通过智能技术生成


前言

今天开始学习算法了,之前一直没有好好学习过。但是今天,我总算明白了算法的意义。


一、题目-素数对猜想

让我们定义d​n为:dn ​​=p ​(n+1) ​​−p ​n ​​ ,其中p ​i ​​ 是第i个素数。显然有d ​1 ​​ =1,且对于n>1有d ​n ​​ 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。 现给定任意正整数N(<10 ​5 ​​ ),请计算不超过N的满足猜想的素数对的个数。

二、做题思路

我一开始的想法很简单,直接求出所有的素数,然后每对素数都检查相差是不是2。求素数就直接穷举。

代码如下:

import java.util.Scanner;
public class test2 {
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int a = in.nextInt();
        int b = 2;
        int c = 3;
        int num = 0;
        boolean z = true;
        for (int x = 3; x<=a ; x++){
            for(int y = 2;y<=x;y++){
                if(x%y==0){
                    z = false;
                    break;
                }
            }
            if(z){
                b = c;
                c = x;
                if (c - b == 2){
                    num++;
                }
            }
            z = true;
        }
        System.out.println(num);
    }
}

功能上没有任何问题,但是在拼题上检查时超时了。原因是在数字为10^5时。检查一个数是不是素数的时间太长了。这时我无能为力了。

修改方案

经过查询,判断一个数是不是素数并不需要一直穷举到它本身。只需要算到平方根就行。这样在后期能节省大量的计算时间。java中计算平方根可以使用Math.sqrt(x)。因此,素数判断代码修改为下。

            for(int y = 2;y<=Math.sqrt(x);y++){
                if(x%y==0){
                    z = false;
                    break;
                }
            }

总结

今天,我终于明白了算法对于程序的意义,之前自己只会用死脑筋,感觉就像打开了一扇大门。虽然只是一个简单的题目,我还是觉得受益匪浅。正好第一篇博客,做个纪念。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值