UVA11005 Semi-prime H-numbers(篩法),uva11005semi-prime

來源:互聯網
上載者:User

UVA11005 Semi-prime H-numbers(篩法),uva11005semi-prime

UVA - 11105Semi-prime H-numbers
Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu

Submit Status

Description

Problem A: Semi-prime H-numbersThis 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.

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.

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 857890
Output for sample input
21 085 5789 62
Don Reble

Source

Root :: Competitive Programming 3: The New Lower Bound of Programming Contests (Steven & Felix Halim) :: More Advanced Topics :: Problem Decomposition :: Two Components - Involving DP 1D RSQ/RMQ
Root :: AOAPC II: Beginning Algorithm Contests (Second Edition) (Rujia Liu) :: Chapter 10. Maths :: Exercises
Root :: AOAPC I: Beginning Algorithm Contests -- Training Guide (Rujia Liu) :: Chapter 2. Mathematics :: Number Theory :: Exercises: Beginner

Submit Status



先篩出所有的H素數,然後暴力搞。。。不知道大家求H半素數有沒有什麼更好的演算法呢?雖然程式跑的很快,但是還是想知道是否有更快的。

#include<bits/stdc++.h>#define foreach(it,v) for(__typeof((v).begin()) it = (v).begin(); it != (v).end(); ++it)using namespace std;typedef long long ll;const int maxn = 1e6 + 5;bool check[maxn];int f[maxn];void init(int n){    memset(check,0,sizeof check);    vector<int> res;    for(int i = 5; i <= n; i += 4) {        if(!check[i])res.push_back(i);        int sz = res.size();        for(int j = 0; j < sz; j++) {            ll t = (ll)i*res[j];            if(t>n)break;            check[t] = true;            if(i%res[j]==0)break;        }    }    memset(f,0,sizeof f);    int sz = res.size();    for(int i = 0; i < sz; i++) {        for(int j = i; j < sz; j++) {            ll t = (ll)res[i] * res[j];            if(t>n)break;            f[t] = 1;        }    }    for(int i = 1; i <= n; i++)f[i] += f[i-1];}int main(){    int n;    init(maxn-5);    while(~scanf("%d",&n)&&n) {        printf("%d %d\n", n, f[n]);    }    return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.