• goj 数数?诶?这么简单?


    Problem Description:

    当看到GDUFE-GAME宣传海报上提到"场内人员可以在任意区域组织游戏"时,QWER按不住自己蠢蠢欲动的心,当场就出了一道题:定义QWER数为任意相邻两个素数之和加上1且是素数的数(eg: 6 = 2 + 3 + 1, 6不是素数, 所以6不是QWER数; 13 = 5 + 7 + 1, 13是素数,所以13是QWER数),给出一个数字n,10秒内求出1到n之间所有QWER数便能获得QWER的一次拥抱。作为QWER的迷弟/迷妹,你也按不住自己放在键盘上的麒麟臂,飞速得写代码,准备去收下QWER的拥抱。

    Input:

    数据包括多个测试实例。
    每个测试实例包含一个整数 n (15 ≤ n ≤ 1000000)。

    Output:

    对于每个测试实例,从小到大输出 1 到 n 之间所有的QWER数(每个QWER数之间间隔一个空格)。

    Sample Input:

    15
    20
    

    Sample Output:

    13
    13 19
    解题思路:先用线性筛打素数表,接下来给定范围内枚举相邻的素数和加1是否满足是素数且不超过n则保存在qwer数组中,最后输出。要用线性筛啊,不然老TLE!!!
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define MAXSIZE 1000000
     4 bool isp[MAXSIZE];
     5 int prime[MAXSIZE],qwer[MAXSIZE];//保存素数
     6 int main()
     7 {
     8     int cnt=0;
     9     memset(isp,true,sizeof(isp));  //打素数表
    10     memset(prime,0,sizeof(prime));
    11     isp[0]=isp[1]=false;
    12     for(int i=2;i<MAXSIZE;++i){
    13         if(isp[i])
    14             prime[++cnt]=i;//从下标1开始保存素数
    15         for(int j=1;j<=cnt && i*prime[j]<MAXSIZE;++j){
    16             isp[i*prime[j]]=false;
    17             if(i%prime[j]==0)
    18                 break;
    19         }
    20     }
    21     int tmp,k,n;
    22     while(cin>>n){
    23         tmp=k=0;
    24         for(int i=2;prime[i]<=n;++i){  //从2开始枚举
    25             tmp=prime[i-1]+prime[i]+1;
    26             if(tmp>n)break;
    27             if(isp[tmp])qwer[++k]=tmp;
    28         }
    29         for(int i=1;i<k;++i)
    30             cout<<qwer[i]<<' ';
    31         cout<<qwer[k]<<endl;
    32     }
    33     return 0;
    34 }
  • 相关阅读:
    为什么机器学习中常常假设数据是独立同分布的?
    深度学习常见的问题
    隐马尔科夫模型(HMM)与词性标注问题
    机器学习常见问题
    特征向量、特征值以及降维方法(PCA、SVD、LDA)
    anaconda安装tensorflow后pip安装jieba出错的问题
    神经网络与BP神经网络
    tensorflow模块安装
    requests爬取百度音乐
    scrapy爬虫,爬取图片
  • 原文地址:https://www.cnblogs.com/acgoto/p/8817630.html
Copyright © 2020-2023  润新知