Semi-prime H-numbers(筛法)
Semi-prime H-numbers 
Time Limit: 1000MS      Memory Limit: 65536K 
Total Submissions: 8069     Accepted: 3479
Description
This problem is based on an exercise of David Hilbert, who pedagogically suggested that one study the theory of 4n+1 numbers. Here, we do only a bit of that.
An H-number is a positive number which is one more than a multiple of four: 1, 5, 9, 13, 17, 21,… are the H-numbers. For this problem we pretend that these are the only numbers. The H-numbers are closed under multiplication.
As with regular integers, we partition the H-numbers into units, H-primes, and H-composites. 1 is the only unit. An H-number h is H-prime if it is not the unit, and is the product of two H-numbers in only one way: 1 × h. The rest of the numbers are H-composite.
For examples, the first few H-composites are: 5 × 5 = 25, 5 × 9 = 45, 5 × 13 = 65, 9 × 9 = 81, 5 × 17 = 85.
Your task is to count the number of H-semi-primes. An H-semi-prime is an H-number which is the product of exactly two H-primes. The two H-primes may be equal or different. In the example above, all five numbers are H-semi-primes. 125 = 5 × 5 × 5 is not an H-semi-prime, because it’s the product of three H-primes.
Input
Each line of input contains an H-number ≤ 1,000,001. The last line of input contains 0 and this line should not be processed.
Output
For each inputted H-number h, print a line stating h and the number of H-semi-primes between 1 and h inclusive, separated by one space in the format shown in the sample.
Sample Input
21  
85 
789 
0
Sample Output
21 0 
85 5 
789 62
Source 
Waterloo Local Contest, 2006.9.30
类似素数筛
#include <set>
#include <map>
#include <list>
#include <stack>
#include <cmath>
#include <queue>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define PI cos(-1.0)
#define RR freopen("input.txt","r",stdin)
using namespace std;
typedef long long LL;
const int MAX = 1e6+100;
int vis[MAX];
int Dp[MAX];
int main()
{
    memset(vis,0,sizeof(vis));
    for(LL i=5;i<MAX;i+=4)//标记Semi-prime H-numbers
    {
        for(LL j=i;j<MAX;j+=4)
        {
            LL ans=i*j;
            if(ans>MAX)
            {
                break;
            }
            if(vis[i]==0&&vis[j]==0)
            {
                vis[ans]=1;
            }
            else
            {
                vis[ans]=-1;
            }
        }
    }
    Dp[0]=0;
    for(int i=1;i<MAX;i++)//记录从1-i之间的Semi-prime H-numbers个数
    {
        if(vis[i]==1)
        {
            Dp[i]=Dp[i-1]+1;
        }
        else
        {
            Dp[i]=Dp[i-1];
        }
    }
    int n;
    while(scanf("%d",&n)&&n)
    {
        printf("%d %d\n",n,Dp[n]);
    }
    return 0;
}
Semi-prime H-numbers(筛法)的更多相关文章
- JD  题目1040:Prime Number (筛法求素数)
		OJ题目:click here~~ 题目分析:输出第k个素数 贴这么简单的题目,目的不清纯 用筛法求素数的基本思想是:把从1開始的.某一范围内的正整数从小到大顺序排列, 1不是素数,首先把它筛掉.剩下 ... 
- (全国多校重现赛一) H Numbers
		zk has n numbers a1,a2,...,ana1,a2,...,an. For each (i,j) satisfying 1≤i<j≤n, zk generates a new ... 
- 数学--数论--HDU2136 Largest prime factor 线性筛法变形
		Problem Description Everybody knows any number can be combined by the prime number. Now, your task i ... 
- AOJ - 0009 Prime Number (素数筛法) && AOJ - 0005 (求最大公约数和最小公倍数)
		http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=34870 求n内的素数个数. /* ********************* ... 
- POJ 3126 Prime Path(筛法,双向搜索)
		题意:一个4位的素数每次变动一个数位,中间过程也要上素数,问变成另一个的最小步数. 线性筛一遍以后bfs就好.我写的双向,其实没有必要. #include<cstdio> #include ... 
- POJ 3292 Semi-prime H-numbers  (素数筛法变形)
		题意:题目比较容易混淆,要搞清楚一点,这里面所有的定义都是在4×k+1(k>=0)这个封闭的集合而言的,不要跟我们常用的自然数集混淆. 题目要求我们计算 H-semi-primes, H-sem ... 
- Prime Matrix(暴力出奇迹)
		Description You've got an n × m matrix. The matrix consists of integers. In one move, you can apply ... 
- 河南省第十届省赛     Binary to Prime
		题目描述: To facilitate the analysis of a DNA sequence, a DNA sequence is represented by a binary num ... 
- Largest prime factor
		problem 3:Largest prime factor 题意:求600851475143的最大的质因数 代码如下: #ifndef PRO3_H_INCLUDED #define PRO3_H_ ... 
- Codeforces Round #324 (Div. 2) D. Dima and Lisa 哥德巴赫猜想
		D. Dima and Lisa Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/584/probl ... 
随机推荐
- Silverlight动画显示Line线
			目的:在silverlight中显示两点之间的连线,要求动画显示连线效果. 如果需实现动画效果不得不了解,Storyborad对象: Storyboard Silverlight 通过时间线控制动 ... 
- JAVA类加载机制详解
			“代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是变成语言发展的一大步”,这句话出自<深入理解JAVA虚拟机>一书,后面关于jvm的系列文章主要都是参考这本书. JAV ... 
- PHP 小谈静态用法
			1.静态的表现形式,在PHP中定义一个静态变量需要加入一个关键字——static,静态对象是属于类的,非静态对象是属于对象的 class Fenbi { public $changdu;//属于对象的 ... 
- SQL 2012 连接失败
- acm pc^2的配置与使用
			-------------------------------------------------------------------------------------- !!! 转载请注明: 转自 ... 
- 从一个小项目看return 引用  重载运算符
			#ifndef _ARRAY_H_ #define _ARRAY_H_ class Array { private: int mLength; int* mSpace; public: Array(i ... 
- struts_22_xwork校验器列表使用说明
			系统提供的校验器列表如下: required (必填校验器,要求field的值不能为null) requiredstring (必填字符串校验器,要求field的值不能为null,并且长度大于0,默认 ... 
- Android 发送短信与接收短信
			package com.example.testsms; import android.app.Activity; import android.app.PendingIntent; import a ... 
- paper  93:OpenCV学习笔记大集锦
			整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的.如果有好的资源,也欢迎介绍和分享. 1:OpenCV学习笔记 作者:CSDN数量:55篇博文网址: ... 
- linux系统-代码行数计算
			find macc-cometd -type f -name "*.java" -print0 | xargs -0 wc -l 
