1748. The Most Complex Number/LG的数学计划~~~持续更新ing(反素数求解)

神奇的反素数, 首先定义

g(x) = x的约数个数

而反素数就是对于任意的0 < j < i 有g(j) < g(i)那么就称i为反素数
那么从这个定义中可以发现的是, 反素数一定是由连续的质数相乘
即对于反素数x一定有x=2^t1*3^t2*5^t3…………..
注意一定要是连续的, 即t1, t2, t3, t4, t5……>0;
好吧说的不清楚, 给百度百科的说明

对于任何正整数x,其约数的个数记做g(x).例如g(1)=1,g(6)=4.如果某个正整数x满足:对于任意i(0<i<x),都有g(i)<g(x),则称x为反素数·
性质一:一个反素数的质因子必然是从2开始连续的质数.
性质二:p=2^t1*3^t2*5^t3*7^t4.....必然t1>=t2>=t3>=....

对于这个证明, 自己yy了一下(有不对的话请读者指出, 高中狗):

  • 设x的最小质因数不是2, 那么把其最小的质因数变成2得到新数x’
    易知x’一定小于x而约数个数和x相等, 矛盾 得证
  • 同理我们对于第二个性质若i < j && ti >= tj 我们又可以把ti, tj两个指数换一个顺序得到的新数一定比原数小且约数相等, 矛盾, 得证
    那么下面是一道反素数的经典例题,
    给出T(T∈[1,100]) 每组数据输入一个整数n(n∈[1,10^18])
    求小于等于n的 约数最多的 最小数;

典型的模板不多说给出代码(根据上面的性质搜索剪枝得到)

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;

#define rep(i, s, t) for(int i = s; i <= t; ++i)

typedef long long ll;
ll prime[30], res = 0, res_cnt, n;

void dfs(ll dep, ll t, ll cnt, ll la) {
    if(res_cnt < cnt) res = t, res_cnt = cnt;
    if(t < res && res_cnt <= cnt) res = t, res_cnt = cnt;
    ll temp = 1;
    rep(i, 1, la) {
        temp *= prime[dep];
        if(n/temp < t) break;//避免乘法爆ll
        dfs(dep+1, t*temp, cnt*(i+1), i);
    }
}

int main() {
#ifndef ONLINE_JUDGE
    freopen("data.in", "r", stdin);
    freopen("result.out", "w", stdout);
#endif
    int t = 1, _;
    prime[t] = 2;
    for(ll i = 3; i <= 0x3f3f3f && t <= 30; ++i) {
        bool flag = false;
        for(int j = 2; (ll)j*j <= i; ++j)
            if(i % j == 0) {flag = 1; break;}
        if(!flag) prime[++t] = i;
    }
    cin >> _;
    while(_--) {
        res_cnt = 0;
        res = 0;
        scanf("%lld", &n);
        dfs(1, 1, 1, 30);
        cout << res << " " << res_cnt << endl;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值