Kuroni and the Punishment CodeForces - 1305F 随机函数mt19937 + 质因子分解
题意:
给你n个数,你每次操作可以对一个数加1或者减1,让你求你最少需要操作多少次可以使这n个数的公因子大于1
题解:
正常方法就是枚举质因子(假设质因子为x),然后对于这个数组中的数a[i],让a[i]变成x的倍数的最小操作数为:
1、如果a[i]不为0
答案为:min(a[i]%x,x-a[i]%x)
2、a[i]为0
答案为:x
后面的思路参考博客:https://blog.csdn.net/qq_41818939/article/details/104658566
假设最大公约数为2时,每个数最多只需要操作一次就可以了,所以操作次数最多为n。所以需要操作次数≤1的数的数量≥n/2。
一个数x操作次数≤1时候会变成x,x+1,x-1三种情况,所以我们可以随机一下需要操作次数≤1的数,这时候随机不到这种数的概率
就是1/2T,T的数字大了之后概率就很小了,几乎不可能了。对每个随机到的数我们直接判断他的三种情况,每种情况就是枚举
他的质因子,然后暴力计算需要操作的次数,最后取最小值就行了。
复杂度为O(T*(sqrt(max)+n*log(max)))。
代码:
1 /*
2 (神奇的随机算法)
3 假设最大公约数为2时,每个数最多只需要操作一次就可以了,所以操作次数最多为n。所以需要操作次数≤1的数的数量≥n/2。
4 一个数x操作次数≤1时候会变成x,x+1,x-1三种情况,所以我们可以随机一下需要操作次数≤1的数,这时候随机不到这种数的概率
5 就是1/2T,T的数字大了之后概率就很小了,几乎不可能了。对每个随机到的数我们直接判断他的三种情况,每种情况就是枚举
6 他的质因子,然后暴力计算需要操作的次数,最后取最小值就行了。
7 复杂度为O(T*(sqrt(max)+n*log(max)))。
8 ————————————————
9 原文链接:https://blog.csdn.net/qq_41818939/java/article/details/104658566
10 */
11 #include<bits/stdc++.h>
12 using namespace std;
13 typedef long long ll;
14 mt19937 rng_32(chrono::steady_clock::now().time_since_epoch().count());
15 ll a[200005];
16 int n;
17 ll cal_ans(ll x)
18 {
19 ll ret=0;
20 for (int i=0;i<n;i++)
21 {
22 ll tmp=a[i]%x;
23 /*防止出现0
24 如果a[i]是0,那么tmp也是0
25 这样的话min(tmp,x-tmp)=0
26 但是这样肯定是错的,因为a[i]是0的话,是没有因子的
27
28 */
29 if (a[i]!=tmp)
30 ret+=min(tmp,x-tmp);
31 else
32 ret+=x-tmp;
33 }
34 return ret;
35 }
36 //计算质因子
37 ll fac(ll x)
38 {
39 ll ret=1e18;
40 ll en=sqrt(x+1ll);
41 for(ll i=2;i<=en;i++)
42 {
43 if (x%i==0)
44 {
45 ret=min(ret,cal_ans(i));
46 while(x%i==0)
47 x/=i;
48 if (x==1)
49 break;
50 }
51 }
52 if (x>1)
53 ret=min(ret,cal_ans(x));
54 return ret;
55 }
56 int main()
57 {
58 //printf("%d\n",(0%5));
59 cin>>n;
60 for (int i=0;i<n;i++)
61 scanf("%I64d",&a[i]);
62 int T=10;
63 ll ans=1e18;
64 while (T--)
65 {
66 ll pos=rng_32()%n;
67 //处理三种情况
68 if (a[pos]>2)
69 ans=min(ans,fac(a[pos]-1ll));
70 ans=min(ans,fac(a[pos]));
71 ans=min(ans,fac(a[pos]+1ll));
72 }
73 cout<<ans;
74 }
Kuroni and the Punishment CodeForces - 1305F 随机函数mt19937 + 质因子分解的更多相关文章
- CodeForces 577A Multiplication Table 质因子数
题目:click here 题意:看hint就懂了 分析:数论小题,在n0.5时间里求n的质因子数 #include <bits/stdc++.h> using namespace std ...
- Codeforces - 151C 质因子分解
显然只需要能跑到第二个因子就赢了 需要特判非平凡因子 常数优化:不用求出所有因子,跑完第二个素数就行了 #include<bits/stdc++.h> using namespace st ...
- Codeforces 杂题集 2.0
记录一些没有写在其他随笔中的 Codeforces 杂题, 以 Problemset 题号排序 1326D2 - Prefix-Suffix Palindrome (Hard version) ...
- Codeforces 893E - Counting Arrays
893E - Counting Arrays 思路:质因子分解. 对于每个质因子,假设它有k个,那么求把它分配到y个数上的方案数. 相当于把k个小球分配到y个盒子里的方案数. 这个问题可以用隔板法(插 ...
- Codeforces 959D. Mahmoud and Ehab and another array construction task(构造, 简单数论)
Codeforces 959D. Mahmoud and Ehab and another array construction task 题意 构造一个任意两个数都互质的序列,使其字典序大等于a序列 ...
- Relatively Prime Powers CodeForces - 1036F (莫比乌斯函数容斥)
Relatively Prime Powers CodeForces - 1036F Consider some positive integer xx. Its prime factorizatio ...
- Codeforces Round #671 (Div. 2)
比赛链接:https://codeforces.com/contest/1419 A. Digit Game 题意 给出一个 $n$ 位数,游戏规则如下: 1-indexed Raze标记奇数位 Br ...
- 刷题记录:Codeforces Round #725 (Div. 3)
Codeforces Round #725 (Div. 3) 20210704.网址:https://codeforces.com/contest/1538. 感觉这个比上一个要难. A 有一个n个数 ...
- 2021record
2021-10-14 P2577 [ZJOI2004]午餐 2021-10-13 CF815C Karen and Supermarket(小小紫题,可笑可笑) P6748 『MdOI R3』Fall ...
随机推荐
- ruby+watir安装指南
安装ruby+watir一共需要下面几个步骤 1. 安装ruby: 2. 升级Rubygems:Rubygems(简称 gems)是一个用于对 Ruby组件进行打包的 Ruby 打包系统. 它提供一个 ...
- 隐马尔科夫模型(HMM)原理详解
隐马尔可夫模型(Hidden Markov Model,HMM)是可用于标注问题的统计学习模型,描述由隐藏的马尔可夫链随机生成观测序列的过程,属于生成模型.HMM在语音识别.自然语言处理.生物信息.模 ...
- 【Linux】Linux基础命令 - 目录相关的命令 ls 、cd、du
文章目录 目录相关的命令 ls 命令:列出文件和目录 cd 命令:切换目录 du 命令:显示目录包含的文件大小 总结 参考资料 巩固和复习Linux系统基础命令知识 目录相关的命令 ls 命令:列出文 ...
- MySQL数据库基础知识及优化
MySQL数据库基础知识及优化必会的知识点,你掌握了多少? 推荐阅读: 这些必会的计算机网络知识点你都掌握了吗 关于数据库事务和锁的必会知识点,你掌握了多少? 关于数据库索引,必须掌握的知识点 目录 ...
- Spring-AOP为类增加新的功能
适配器的简单应用实现: 比如:有一个类Car,在类中有两个属性一个为汽车名name,另一个为速度speed.其行为为run(). 现在有一辆车BMWCar 增加了GPS功能.如下实现: 基本类: pu ...
- [Usaco2012 Dec]Running Away From the Barn
题目描述 给出以1号点为根的一棵有根树,问每个点的子树中与它距离小于等于l的点有多少个. 输入格式 Line 1: 2 integers, N and L (1 <= N <= 200,0 ...
- USB限流IC,输入5V,输出5V,最大3A限流
USB限流芯片,5V输入,输出5V电压,限流值可以通过外围电阻进行调节,PWCHIP产品中可在限流范围0.4A-4.8A,并具有过压关闭保护功能. 过压关闭保护: 如芯片:PW1555,USB我们一半 ...
- nmap的理解与利用(初级)
在命令窗口下输入命令等待,可以用回车来查看进度 nmap进行探测之前要把域名通过dns服务器解析为ip地址,我们也可以使用指定的dns服务器进行解析. nmap --dns-servers 主机地址 ...
- CMU数据库(15-445)-实验2-B+树索引实现(中)删除
3. Delete 实现 附上实验2的第一部分 https://www.cnblogs.com/JayL-zxl/p/14324297.html 3. 1 删除算法原理 如果叶子结点中没有相应的key ...
- OPTIONS的预请求(Preflighted Request)
OPTIONS的预请求(Preflighted Request) Ajax 请求中出现OPTIONS(Request Method: OPTIONS)_qiao-CSDN博客 https://blog ...