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 ...
随机推荐
- mysql: Character set 'utf8mb4' is not a compiled character set and is not specified in the '/usr/share/mysql/charsets/Index.xml' file
mysql: Character set 'utf8mb4' is not a compiled character set and is not specified in the '/usr/sha ...
- PHP反序列化 - Pikachu
概述 序列化serialize()序列化说通俗点就是把一个对象变成可以传输的字符串,比如下面是一个对象: class S{ public $test="pikachu"; } $s ...
- Vitis下载安装尝试
Vitis下载安装记录 一.下载安装 文章目录 一.下载安装 提示:以下是本篇文章正文内容,下面案例可供参考 一.下载安装 首先本次下载主要使用的是linux系统,所以我们先看一下Vitis支持的li ...
- yum配置文件下使用自定义变量
yum的配置文件中,可以使用的变量,简称为yum变量: 默认的yum变量有: $releasever(Release Version),发行版的版本 $arch,CPU体系结构,通过 Python 的 ...
- 小白的经典CNN复现(二):LeNet-5
小白的经典CNN复现(二):LeNet-5 各位看官大人久等啦!我胡汉三又回来辣(不是 最近因为到期末考试周,再加上老板临时给安排了个任务,其实LeNet-5的复现工作早都搞定了,结果没时间写这个博客 ...
- 浅谈前端常用脚手架cli工具及案例
前端常用脚手架工具 前端有很多特定的脚手架工具大多都是为了特定的项目类型服务的,比如react项目中的reate-react-app,vue项目中的vue-cli,angular 项目中的angula ...
- 【链表】leetcode-1290-二进制链表转整数
leetcode-1290-二进制链表转整数 题目描述 给你一个单链表的引用结点 head.链表中每个结点的值不是 0 就是 1.已知此链表是一个整数数字的二进制表示形式. 请你返回该链表所表示数字的 ...
- 报错:java.lang.ClassNotFoundException: io.opentracing.util.GlobalTracer
报错:java.lang.ClassNotFoundException: io.opentracing.util.GlobalTracer 近来在做一个在线教育的项目,课程信息放在数据库,而视频放在阿 ...
- python RecursionError: maximum recursion depth exceeded while calling
import copyimport sys # 导入sys模块sys.setrecursionlimit(8192) # 将默认的递归深度修改为r = sys.getrecursionlimit()_ ...
- tee MultiWriter creates a writer that duplicates its writes to all the // provided writers, similar to the Unix tee(1) command.
https://zh.wikipedia.org/wiki/Tee 在计算机科学中,tee是一个常见的指令,它能够将某个指令的标准输出,导向.存入某个档案中.许多不同的命令行界面(Shell)都提供这 ...