zoukankan      html  css  js  c++  java
  • SXYBT-0102H数

    试题编号:2603 收 藏   
    SXYBT-0102H数
    难度级别:B; 运行时间限制:1000ms; 运行空间限制:65536KB; 代码长度限制:2000000B
    试题描述

    形如4n+1的数被称为“H数”,乘法在“H数”组成的集合内是封闭的。在这个集合中只能被1和本身整除的数叫做“H-素数”(不包括1),其余的数被称为“H-合数”。一个“H-合成数”是一个能且只能分解成两个“H-素数”乘积的“H-合数”(可能有多种分解方案)。比如441=21*21=9*49,所以441是“H-合成数”。125=5*5*5,所以125不是“H-合成数”。

    求0到h范围内“H-合成数”的个数。

    输入
    输入包含若干行,每行一个小于等于1000001的整数h,输入0时表示结束。
    输出
    对于每一行输入,输出一个数,表示答案。
    输入示例
    21
    85
    0
    输出示例
    0
    5

    洛谷题目传送门:https://www.luogu.org/problem/show?pid=UVA11105

    思路:主题思路应该是筛法吧,先筛特殊的H-素数,再通过素数找到H-合成数。我才不会告诉你我调了三个小时。

     提示:这是我们校内OJ,到洛谷上注意读题目输出要求。

    直接上代码

     1 #include<bits/stdc++.h>
     2 #define MAXN 1000002
     3 using namespace std;
     4 int h;
     5 bool prime[MAXN],s[MAXN];
     6 void init(int n)//筛H-素数的函数 
     7 {
     8     for(int i=5;i<n/5;i+=4) 
     9     {
    10         if(prime[i]==false)
    11         {
    12             for(int j=5;j*i<n;j+=4)
    13             {
    14                 prime[i*j]=true;
    15             }
    16         }
    17     }  
    18 }
    19 
    20 int main()
    21 {
    22     init(MAXN);
    23     for(int i=5;i*i<MAXN;i+=4) //直接处理最大范围内的H-合成数 
    24     {
    25         if(prime[i]==false)
    26         {
    27             for(int j=5;i*j<MAXN;j+=4) 
    28             {
    29                 if(prime[j]==false) s[i*j]=true;//通过H-素数推出H-合成数
    30             }
    31         }
    32     }  
    33     while(1)
    34     {
    35         int ans=0;
    36         scanf("%d",&h);
    37         if(h==0) break;
    38         for(int i=5;i<=h;i+=4) 
    39         {
    40             if(s[i]==true) ans++;//直接走一遍就OK了 
    41         }
    42         printf("%d
    ",ans);
    43     }
    44     return 0;
    45 }
    View Code
  • 相关阅读:
    C# 序列化技术详解《转》
    DataGridView中的DataGridViewComboBoxColumn使用浅析
    取EXCEL文件的3种方法
    教你几种在SQLServer中删除重复数据方法
    事件浅析
    迭代委托链
    C#调用耗时函数时显示进度条浅探
    启动公告【过时】
    在Web应用中接入微信支付的流程之极简清晰版
    VBoxManage: error: Cannot register the hard disk 解决办法
  • 原文地址:https://www.cnblogs.com/jiuduSHENBENG/p/10012135.html
Copyright © 2011-2022 走看看