java1007素数对猜想(20分)pat乙级pat(basiclevel)practice(中文)(代码片段)

java1007素数对猜想(20分)pat乙级pat(basiclevel)practice(中文)(代码片段)

你是最棒的

前言

学得越多,不会得越多
种一颗树的最佳时间是十年前,其次就是现在

pat所有题解代码都会陆续上传到Github,请好兄弟们自行下载:https://github.com/233zzh/PAT
qq交流群:1107710098

题目:1007 素数对猜想 (20分)

题目链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805317546655744

让我们定义 d ​ n d_​n dn​​ 为: d ​ n ​ ​ d_​n​​ dn = p n + 1 p_n+1 pn+1​​ − p n p_n pn,其中 p ​ i p_​i pi 是第i个素数。显然有 d 1 d_1 d1​​ =1,且对于 n>1 有 d ​ n d_​n dn 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。

现给定任意正整数 N(< 1 0 5 10^5 105​ ),请计算不超过N的满足猜想的素数对的个数。

输入格式:
输入在一行给出正整数N。

输出格式:
在一行中输出不超过N的满足猜想的素数对的个数。

输入样例:
20

输出样例:
4

要点:

第二次for循环要用 2 ~ 平方去判断i 能不能被整除,而不是2 ~ i

代码

import java.util.Scanner;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author: 张志浩 Zhang Zhihao
 * @Email: 3382885270@qq.com
 * @Date: 2020/11/26
 * @Time: 22:08
 * @Version: 1.0
 * @Description: Description
 */
public class Prime2 
    public static void main(String[] args) 
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        sc.close();
        int first_prime = 2;
        int count = 0;
        for (int i = 3; i <= N; i++) 
            int j;
            int temp = (int) Math.sqrt(i);
            for (j = 2; j <= temp; j++) 
                if (i % j == 0) 
                    break;
                
            
            if (j == (temp + 1)) 
//                System.out.println(i);
                if ((i - first_prime) == 2) 
                    count++;
                
                first_prime = i;
            
        
        System.out.println(count);
    


相关内容

pat乙级.1007.素数对猜想(20)(代码片段)

让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数。显然有 d1=1 且对于n>1有 dn 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。

现给定任意正整数N (< 105),请计算不超过N的满足猜想的素数对的个数。

输入格式:每个测试输入包含1个测试用例,给出正整数N。

输出格式:每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数。

输入样例:

20

输出样例:

4
#include <stdio.h>
#include <math.h>
int main()
    int i,j,n;
    int temp = 0;
    scanf("%d",&n);
    for(i=5;i<=n;i++)
        if(i%2==0)
            continue;
        
        else
             for(j=2;j<i-2;j++)
                 if(i%j==0||(i-2)%j==0)
                    break;
                 
                 else
                     if(j==i-3)
                     temp++;
                     
                 
             
        
    
    printf("%d",temp);
    getchar();
    getchar();
    return 0;

 

赞(1)

文章来源于网络,原文链接请点击 这里
文章版权归作者所有,如作者不同意请直接联系小编删除。
作者:爱做梦的鱼