zoukankan      html  css  js  c++  java
  • POJ 3292 Semi-prime H-numbers

    题意:

    H_Number 是一个比4的倍数多1的数,即4n + 1。H_Number 分为 H_Prime 和 H_Comosite。其中 H_Prime 仅能由1×h组成,而 H_Composite 除了1和h可有多个因子。H_Semi_Prime 表示仅有两个 H_Prime 因子(除了1和本身)。

    问:给一个 H_Number,求出1到 H_Number 中有多少个 H_Semi_Prime。

    思路:

    打表,表分为三种情况,0表示H_Number,1表示H_Semi_Prime, - 1表示H_Composite。先将表都初始化为0,然后从小到大打。

    #include <iostream>
    #include <cstring>
    using namespace std;
    
    const int MAX_H = 1000001;
    int H_number[MAX_H + 1];
    int Count[MAX_H];
    int H;
    void init() {
    	memset(H_number, 0, sizeof(H_number)); // H_number[x]==0表示x是H_Prime;
    	for (int i = 5; i <= MAX_H; i += 4)
    	for (int j = 5; j <= MAX_H; j += 4) {
    		if (i*j > MAX_H) break;
    		if (H_number[i] == 0 && H_number[j] == 0)
    			H_number[i*j] = 1; // 表示i*j为H_semi_Prime
    		else
    			H_number[i*j] = -1; // 表示i*j为H_Composite
    	}
    	Count[1] = 0; // 统计
    	for (int i = 5; i <= MAX_H; i += 4)
    	if (H_number[i] == 1) Count[i] = Count[i - 4] + 1;
    	else Count[i] = Count[i - 4];
    }
    void solve() {
    	printf("%d %d
    ", H, Count[H]);
    }
    int main()
    {
    	init();
    	while (cin >> H && H) {
    		solve();
    	}
    	return 0;
    }
  • 相关阅读:
    eslint 的 env 配置是干嘛使的?
    cookie httpOnly 打勾
    如何定制 antd 的样式(theme)
    剑指 Offer 66. 构建乘积数组
    剑指 Offer 65. 不用加减乘除做加法
    剑指 Offer 62. 圆圈中最后剩下的数字
    剑指 Offer 61. 扑克牌中的顺子
    剑指 Offer 59
    剑指 Offer 58
    剑指 Offer 58
  • 原文地址:https://www.cnblogs.com/demian/p/7407317.html
Copyright © 2011-2022 走看看