OJ2474输入输出保护继承

/*
* Copyright (c)2013, 烟台大学计算机学院学生
* All rightsreserved.
* 文件名称: array.cpp
* 作    者:   李中意
* 完成日期:2014  年6 月 11  日
* 版本号: v1.0
* 输入描述:无
*/

#include <iostream>
using namespace std;
class Student
{
public:
    void get_value()
    {
        cin>>num>>name>>sex;
    }
    void display( )
    {
        cout<<"num: "<<num<<endl;
        cout<<"name: "<<name<<endl;
        cout<<"sex: "<<sex<<endl;
    }
private :
    int num;
    string name;
    char sex;
};

//主函数已给定如下,提交时不需要包含,会自动添加到程序尾部
class Student1:protected Student
{
    public:
    void get_value1()
    {
        get_value();
        cin>>age>>addr;
    }
    void display1()
    {
        display();
        cout<<"age: "<<age<<endl;
        cout<<"address: "<<addr<<endl;
    }
    private:
    int age;
    string addr;
};

/* C++代码 */
int main()
{
    Student1 stud1;
    stud1.get_value1();
    stud1.display1();
    return 0;
}



 

<think>好的,用户想找杭电OJ2136的题目解析或代码实现。首先,我需要确认题目内容。HDU 2136的题目是找出一个数的最大素数因子在素数表中的位置。例如,若n=24,其素因子是2和3,最大的素因子是3,而3在素数表中排第2位(假设2是第1位)。 接下来,我应该考虑如何解决这个问题。常规思路是先用筛法生成素数表,然后记录每个数的最大素因子及其排名。但用户可能需要具体的代码实现,所以我需要检查常见的解决方案。 参考站内引用提到的关注点分离,可能需要在筛法的过程中同时记录每个数的最大素因子,并维护一个素数排名表。这样可以避免多次计算,提高效率。 然后,代码实现部分需要用Python或其他语言展示筛法的优化版本。需要注意处理大数的情况,以及数组的大小限制。例如,HDU 2136的n可能达到10^6,所以筛法数组要足够大。 用户还可能关心时间复杂度和优化方法。比如,预处理筛法的时间是O(n log log n),查询是O(1),这适合多次查询的情况。此外,要注意特殊情况的处理,比如n=1时没有素数因子,应返回0。 最后,生成相关问题时要围绕素数筛选、最大素因子的性质、算法优化等方面提问,帮助用户深入理解。</think>关于HDU OJ 2136题目的解析和代码实现,该题要求找出给定数的最大素数因子在素数表中的位置。以下是分步说明和解决方案: ### 题目理解 给定正整数$n$,要求: 1. 找到$n$的最大素数因子 2. 确定该素数在素数表中的位置(以2作为第一个素数,3为第二个,5为第三个等) 示例: 输入:24 → 素因子为2和3 → 最大素因子3 → 输出2 ### 算法设计 采用**埃拉托斯特尼筛法**的变种: 1. 预处理所有数的最大素因子 2. 同步记录素数排名 3. 时间复杂度:$O(n \log \log n)$ 4. 空间复杂度:$O(n)$ ### 代码实现(Python) ```python def max_prime_factor_rank(): MAX = 10**6 + 5 max_prime = [0] * MAX rank = [0] * MAX cnt = 0 for i in range(2, MAX): if max_prime[i] == 0: cnt += 1 rank[i] = cnt for j in range(i, MAX, i): max_prime[j] = i # 更新j的最大素因子 else: rank[i] = rank[max_prime[i]] # 非素数继承其最大素因子的排名 while True: try: n = int(input()) print(0 if n == 1 else rank[n]) except EOFError: break max_prime_factor_rank() ``` ### 关键点说明 1. `max_prime`数组存储每个数的最大素因子 2. `rank`数组记录素数的顺序排名 3. 当处理到素数$i$时,更新其所有倍数的最大素因子 4. 非素数直接继承其最大素因子的排名[^1] ### 注意事项 - 当输入为1时返回0(1没有素数因子) - 数组大小需要根据题目要求调整(本题设置为$10^6+5$)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值