牛客想开了大赛二--n的约数(求在[1,n]内约数个数最多的数的约数个数)

本文探讨了一种高效算法,用于找出指定范围内拥有最多约数的数,并详细解释了其背后的数学原理与质数指数组合策略。通过递归深度优先搜索的方法,实现了对大范围数据的有效处理。

传送们

题意

给定一个t

接下来t行

每行给一个n,求[1,n]中的约数最多的数的约数

输入格式

``
第一行一个正整数t
之后t行,每行一个正整数n

输出格式

输出t行,每行一个整数,表示答案

输入

5
13
9
1
13
16

输出

6
4
1
6
6

数据范围

1=<n=1e18

思路

这道题刚刚看到数据范围的时候,就知道不能够暴力,也没有想到其他想法,就在网上看了题解。

大题思路是这样:

对于每一个数n,我们可以把它分解成这种形式

n=p1a1*p2a2*…pn^an

pi都是质数,这里的pi>pi-1.

那么n的约数就是`(a1+1)(a2+1)(a3+1)

我们知道这个定理后可以做什么呢?

和[1,n]有什么关系呢?

上面的这个定理说明我们只要有质数,再任意组合他们的指数,就可以凑出所有的数。

所以现在的思路就是用指数凑出小于n的数,再更新答案

code


    #include <bits/stdc++.h>
    #define ll long long
    using namespace std;
    
    int p[20] = {0, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 51};
    
    ll ans, n;
    
    void dfs(int pos, ll num, ll sum, int len)
    {
    	if (sum > n)return ;
    	if (sum <= n)ans = max(ans, num);
    	for (int i = 1; i <= len; i++)
    	{
    		ll res = pow(p[pos], i);
    		if (sum > n / res)break;
    		dfs(pos + 1, num * (i + 1), sum * (res), i);
    	}
    }
    int main()
    {
        int t,n;
        while(t--)
        {
    	cin >> n;
    	ans = 0;
    	dfs(1, 1, 1, 20);
    	cout << ans << endl;
        }
        return 0;
    
    }



### 关于京东牛客网技术运维工程师笔试题目与经验 #### 笔试内容概述 技术运维工程师的笔试通常会涉及计算机基础、网络协议、操作系统原理以及实际问题解决能力等方面的知识。根据以往的经验,京东的技术运维工程师笔试可能包括但不限于以下几个方面[^1]: - **基础知识**:据结构与算法的基础应用,例如组、链表的操作,排序算法的选择与实现。 - **网络知识**:TCP/IP 协议栈的理解,HTTP/HTTPS 的工作流程,DNS 解析过程等。 - **Linux 操作系统**:Shell 编程、进程管理、文件权限控制等内容。 - **据库操作**:SQL 查询语句优化,索引设计,事务处理机制。 以下是几个常见的考察方向及其对应的示例问题: #### 据结构与算法实例 ```python def find_missing_number(nums): n = len(nums) + 1 expected_sum = n * (n + 1) // 2 actual_sum = sum(nums) return expected_sum - actual_sum ``` 此函用于在一个长度为 `n` 的列表中找到缺失的一个整,假设该列表原本应包含从 1 到 `n` 的连续正整序列[^1]。 #### Linux Shell 实现脚本 编写一个简单的 Bash 脚本来监控磁盘空间并发送警告邮件给管理员: ```bash #!/bin/bash THRESHOLD=90 CURRENT=$(df / | grep / | awk '{ print $5}' | sed 's/%//g') if [ "$CURRENT" -gt "$THRESHOLD" ]; then echo "Warning: Disk space is low." | mail -s "Disk Space Alert" admin@example.com fi ``` 这段代码展示了如何通过命令行工具检测根目录下的可用存储容量,并在超过设定阈值时触发警报通知[^3]。 #### SQL 查询技巧 对于大规模关系型据库中的性能调优而言,合理创建复合索引可以显著提升查询效率。比如,在一张记录用户活动日志的大表里查找特定时间段内的活跃用户量时,应该考虑对日期字段建立覆盖索引来减少全表扫描带来的开销。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值