乙级1007

1007. 素数对猜想 (20)

时间限制

400 ms

内存限制

65536 kB

代码长度限制

8000 B

判题程序

Standard

作者

CHEN, Yue

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

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

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

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

输入样例:

20

输出样例:

4

思路:输入N,遍历从1到N,看是否是素数(每个数i从2到i-1遍历,看是否能被i整除,能整除则不为素数,否则为素数),利用一个哈希数组标识,默认为false,若能整除,则不为素数,否则为素数,将素数存入数组ans[],遍历数组ans[],看是否有满足题意的素数,有则sum+1
#include<cstdio>
bool hash[100010]={false};//不是素数?
int main()
{
    int n,sum=0,ans[100010]={},k=1,dn=0;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        for(int j=2;j<i;j++)
        {
            if(i%j==0)
                hash[i]=true;
        }
    }
    for(int i=1;i<=n;i++)
    {
        if(hash[i]==false)
            ans[k++]=i;
    }
    for(int i=1;i<=k;i++)
    {
        dn=ans[i+1]-ans[i];
        if(dn==2)
            sum++;
    }
    printf("%d",sum);

    return 0;
}

时间复杂度太高了,待解决

时间: 2024-10-24 16:31:05

乙级1007的相关文章

PAT乙级1007.素数对猜想(20)

1007. 素数对猜想 (20)让我们定义 dn 为:dn = pn+1 – pn,其中 pi 是第i个素数.显然有 d1=1 且对于n>1有 dn 是偶数.“素数对猜想”认为“存在无穷多对相邻且差为2的素数”.现给定任意正整数N (< 105),请计算不超过N的满足猜想的素数对的个数.输入格式:每个测试输入包含1个测试用例,给出正整数N.输出格式:每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数.输入样例:20输出样例:4 分析: 满足猜想的素数对:相邻且相差为2.两个都是素数:

PAT乙级1007

1007 素数对猜想 (20 分) 让我们定义d?n??为:d?n??=p?n+1??−p?n??,其中p?i??是第i个素数.显然有d?1??=1,且对于n>1有d?n??是偶数.“素数对猜想”认为“存在无穷多对相邻且差为2的素数”. 现给定任意正整数N(<10?5??),请计算不超过N的满足猜想的素数对的个数. 输入格式: 输入在一行给出正整数N. 输出格式: 在一行中输出不超过N的满足猜想的素数对的个数. 输入样例: 20 输出样例: 4 1 #include<bits/stdc+

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

[PAT乙级] Practise 1007 素数对猜想

PAT (Basic Level) Practice (中文)1007 1007 素数对猜想 让我们定义dn为:dn=pn+1?pn,其中pi是第i个素数.显然有d1=1,且对于n>1有dn是偶数."素数对猜想"认为"存在无穷多对相邻且差为2的素数". 现给定任意正整数N(<105),请计算不超过N的满足猜想的素数对的个数. 输入格式: 输入在一行给出正整数N. 输出格式: 在一行中输出不超过N的满足猜想的素数对的个数. 输入样例: 20 输出样例: 4

乙级(Basic Level) 1007

题目描述 本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数.你需要输出商数Q和余数R,使得A = B * Q + R成立. 输入描述: 输入在1行中依次给出A和B,中间以1空格分隔. 输出描述: 在1行中依次输出Q和R,中间以1空格分隔. 输入例子: 123456789050987654321 7 输出例子: 17636684150141093474 3 解法: Python:a = input().split() a = [int(i) for i in a] print(

1007 数字逻辑练习题

1007: 数字逻辑练习题 时间限制: 1 Sec  内存限制: 128 MB提交: 264  解决: 59[提交][状态][讨论版] 题目描述 原码.反码.补码都是一样的,都是正数本身.  对于负数: 原码是符号位为 1,数值部分取绝对值的二进制. 反码是符号位为 1,其它位是原码取反. 补码是符号位为 1,其它位是原码取反,未位加 1.  输入一个 64bit 十进制整数,输出它的原码,反码,补码的 16 进制表示法 输入 有多组数据,每组数据一行,为一个 64bit 十进制整数,包含正负符

1007. 素数对猜想 (20)

1007. 素数对猜想 (20) 让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数.显然有 d1=1 且对于n>1有 dn 是偶数."素数对猜想"认为"存在无穷多对相邻且差为2的素数". 现给定任意正整数N (< 105),请计算不超过N的满足猜想的素数对的个数. 输入格式:每个测试输入包含1个测试用例,给出正整数N. 输出格式:每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数. 输入样例: 20 输出样例: 4 分

HDU 1007 [Quoit Design] 分治

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1007 题目大意:N个点,求最近一对点的距离的一半. 关键思想:最傻瓜式的枚举所有点对的距离找最短 O(n^2),会TLE. 分治可以优化成O(nlogn).二分区间,考虑三种情形:点对的两点都在左区间.两点都在右区间.两点一左一右 前两种情况,可以递归地解出来,分别为d1,d2.第三种,可以依据min(d1,d2)收缩成一条带状区域(勾股定理显然). 然后对带中所有点进行处理,此时又可依据min(d

POJ 1007:DNA排序

AC CODE: 1 import java.util.Scanner; 2 3 public class Main { 4 5 public static void main(String[] args) { 6 Scanner input = new Scanner(System.in); 7 8 // 得到数据 9 int n = input.nextInt(); 10 int m = input.nextInt(); 11 String temp = input.nextLine();