zoukankan      html  css  js  c++  java
  • POJ 3292, Semiprime Hnumbers

    Time Limit: 1000MS  Memory Limit: 65536K
    Total Submissions: 4166  Accepted: 1652


    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


    // POJ3292.cpp : Defines the entry point for the console application.
    //

    #include 
    <iostream>
    #include 
    <cmath>
    using namespace std;

    int main(int argc, char* argv[])
    {
        unsigned 
    long long const SIZE = 1000005;
        unsigned 
    long long MAX = unsigned long (sqrt(SIZE*1.0));
        
    int H[SIZE];
        memset(H, 
    0sizeof(H));
        unsigned 
    long long num;
        
    for (unsigned long long i = 5; i < MAX; i+=4)
        {
            
    for(unsigned long long j = i; (num = i * j )< SIZE; j+=4)
            {
                
    if (H[i] != 0 || H[j] != 0
                    H[num] 
    = -1;
                
    else if (H[num]!=-1)
                    H[num] 
    = 1;
            }
        }

        
    for (int i = 1; i < SIZE; ++i) 
        {
            
    if (H[i] == 1) H[i] = H[i-1+ 1;
            
    else H[i] = H[i-1];
        }

        
    int N;
        
    while(scanf("%d"&N)!=EOF && N!=0)
            cout 
    << N << " " << H[N] << endl;

        
    return 0;
    }


  • 相关阅读:
    最简洁的Mysql修改密码,不会你打我
    两步解决jetbrains-agent-latest.zip不能拖入工作区
    JSON学习笔记
    【书评】【不推荐】《机器学习实战——基于Scikit-Learn和TensorFlow》
    weblogic更新部署
    功能网址
    jupyter快捷键
    MYSQL连接字符串参数说明
    C# 格式验证
    Supervisor
  • 原文地址:https://www.cnblogs.com/asuran/p/1587802.html
Copyright © 2011-2022 走看看