首页 > 其他分享 >CF300E Empire Strikes Back

CF300E Empire Strikes Back

时间:2023-12-09 21:45:23浏览次数:30  
标签:size prim int CF300E void Back Empire prod define

Empire Strikes Back

Luogu CF300E

题目描述

给定 \(k\) 个数 \(a_1,a_2,\dots,a_k\),求一个数 \(p=n!\) 使得 \(p\) 能被 \(\prod_{i=1}^ka_i!\) 整除。

\(a_i\le 10^7,k\le 10^6\)

Solution

考虑先对 \(\displaystyle\prod\limits_{i=1}^ka_i!\) 分解质因数。假设分解出来为 \(\displaystyle\prod\limits_{i=1}^tp_i^{k_i}\),那么显然可以直接二分找到 \(p\),因为一定存在 \(p_i\le 10^7\)。这部分容易做到 \(\mathcal O(n\log n)\) 的复杂度,即直接筛出 \(10^7\) 之内的所有质数 \(p_i\),然后枚举 \(p_i\) 的所有次幂并计算其贡献。

考虑怎么对 \(\displaystyle\prod\limits_{i=1}^ka_i!\) 分解质因数,直接暴力对每个数分解然后加起来显然是不行的。发现 \(a_i!\) 其实可以看做是一个区间的数乘起来,那么可以使用差分与处理出每个数出现了多少次,然后使用和上面一样的做法,枚举 \(p_i\) 的每一个次幂,然后遍历所有的 \(p_i\mid d\),将 \(d\) 出现的次数贡献进 \(p_i\) 的贡献。

时间复杂度大概是比 \(n\log^2 n\) 小的多的,具体多少不会算(逃。

Code
// Cirno is not baka!
#include <bits/stdc++.h>
#define For(i, a, b) for (int i = (a); i <= (int)(b); ++i)
#define Rof(i, a, b) for (int i = (a); i >= (int)(b); --i)
#define FILE(filename) { \
    freopen(#filename ".in", "r", stdin); \
    freopen(#filename ".out", "w", stdout); \
}
#define All(x) x.begin(), x.end()
#define rAll(x) x.rbegin(), x.rend()
#define pii pair<int, int>
#define fi first
#define se second
#define i64 long long
#define i128 __int128_t
#define mkp make_pair
// #define int long long
#define epb emplace_back
#define pb push_back
using namespace std;

const int _N = 1e6 + 5, mod = 1e9 + 7, inf = 1e9, _M = 1e7 + 5;
template<typename T> void Max(T &x, T y) {x = max(x, y);}
template<typename T> void Min(T &x, T y) {x = min(x, y);}

namespace BakaCirno {
    bitset<_M> flag;
    vector<int> prim;
    vector<i64> cnt;
    void InitPrime(int n) {
        For(i, 2, n) {
            if (!flag[i]) prim.epb(i);
            for (int j : prim) {
                if (j * i > n) break;
                flag[j * i] = 1;
                if (i % j == 0) break;
            }
        }
        cnt.resize(prim.size(), 0);
    }
    int N, A[_M];
    void _() {
        InitPrime(1e7);
        cin >> N; A[0] = N;
        int mx = 0;
        For(i, 1, N) {
            int x; cin >> x; Max(mx, x);
            A[x + 1] -= 1;
        }
        For(i, 1, mx) A[i] += A[i - 1];
        For(i, 0, prim.size() - 1) for (i64 j = prim[i]; j <= mx; j *= prim[i])
            for (int k = j; k <= mx; k += j)
                cnt[i] += A[k];
        i64 L = 1, R = 1e15;
        auto Check = [&](i64 x)->bool {
            vector<i64> tcnt(prim.size(), 0);
            For(i, 0, prim.size() - 1) for (i128 j = prim[i]; j <= x; j *= prim[i])
                tcnt[i] += x / j;
            For(i, 0, prim.size() - 1)
                if (tcnt[i] < cnt[i]) return 0;
            return 1;
        };
        while (L <= R) {
            i64 mid = (L + R) >> 1;
            if (Check(mid)) R = mid - 1;
            else L = mid + 1;
        }
        cout << L << '\n';
    }
}

signed main() {
    // FILE(test);
    cin.tie(0)->sync_with_stdio(0); int T = 1;
    // cin >> T;
    while (T--) BakaCirno::_();
    // fout.flush();
}

标签:size,prim,int,CF300E,void,Back,Empire,prod,define
From: https://www.cnblogs.com/hanx16msgr/p/17891540.html

相关文章

  • 微信小程序使用navigateBack返回上一页时如何传递参数
    需求A页面的数据跳转到B页面,B页面将A页面传递过来的数据进行处理后,将处理结果返回给A页面,并且路由栈中不会多余页面尝试办法varpages=getCurrentPages();varprevPage=pages[pages.length-2];//上一个页面prevPage.setData({img_url:e.tempFilePath,isSho......
  • logback-boot.xml
    <?xmlversion="1.0"encoding="UTF-8"?><configuration><!--%m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名,%i索引【从数字0开始递增】,,,--><!--appender是configuration的子节点,是负责写日志的组件。--><!--ConsoleAppender:把日志输出到控制台--......
  • Redis报错:WARNING: The TCP backlog setting of 511 cannot be enforced because /pro
    报错内容:1:C08Dec202305:47:33.348#oO0OoO0OoO0OoRedisisstartingoO0OoO0OoO0Oo1:C08Dec202305:47:33.348#Redisversion=7.0.5,bits=64,commit=00000000,modified=0,pid=1,juststarted1:C08Dec202305:47:33.348#Configurationloaded1:M08De......
  • Veeam Backup & Replication v12.1 (Windows) - 备份和恢复
    VeeamBackup&Replicationv12.1(Windows)-备份和恢复VeeamDataPlatform|面向混合云和多云的备份和恢复监控和分析恢复编排请访问原文链接:https://sysin.org/blog/veeam-backup-12/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org全球首屈一指的备份和......
  • torch反向传播backward()函数解析
    参考网址:https://blog.csdn.net/weixin_44179269/article/details/124573992?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170167791616800197042802%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=170167791616800197042802&a......
  • Java Spring Boot logback 日志配置与使用总结
    在项目开发中,日志是必不可少的,没有日志,怎么排查bug,而且日志也有助于我们看到相关的输入输出,总的来说,日志是日常项目开发必须要有的。今天我们学习SpringBoot中集成logback日志,这里主要会涉及到日志的配置和简单实现,更多的细节请移步官方文档,自己品读,此文档有助于初涉Sprin......
  • 【backward解决方案与原理】网络模型在梯度更新时出现变量版本号机制错误
    【backward解决方案与原理】网络模型在梯度更新时出现变量版本号机制错误报错详情错误产生背景原理解决方案RuntimeError:oneofthevariablesneededforgradientcomputationhasbeenmodifiedbyaninplaceoperation报错详情  模型在backward时,发现如下报错......
  • Fine-grained Visual Classification with High-temperature Refinement and Backgrou
    摘要细粒度视觉分类是一项具有挑战性的任务,因为类别之间的相似性很高,单个类别中数据之间的差异不同。为了应对这些挑战,以前的策略侧重于定位类别之间的细微差异并理解其中的判别特征。然而,背景还提供了重要信息,可以告诉模型哪些特征对于分类是不必要的甚至有害,并且过于依赖细微特......
  • Spring Boot2 开启系统日志(3)- 在Logback中配置日志
    Logback的配置文件通常命名为logback.xml,它控制了日志记录方式、级别和输出目标。在SpringBoot项目中,可以将logback.xml文件放置在src/main/resources目录下。以下是一个基本的logback.xml配置示例:<?xmlversion="1.0"encoding="UTF-8"?><configuration><!--控制台输......
  • EMPIRE_ BREAKOUT
    一、下载地址Empire:Breakout二、渗透记录1.信息搜集打开靶机,自动获取到靶机ip:192.168.32.141,省的去探测对应的ip进行扫描探测对应的端口以及服务信息,主要内容为,端口:80、10000、20000;版本:samba。进入80端口,查看编码,发现有段话,发现是ook!加密,进行解密。Brainfuck/OoK加密......