首页 > 其他分享 >0829-T3 公因数

0829-T3 公因数

时间:2024-08-29 19:14:30浏览次数:14  
标签:0829 int res T3 次数 操作 质因数 公因数

0829-T3 公因数

题意

给定一个长度为 \(n\) 的序列,可以做若干次操作。

每次操作选择两个数 \(A,B\),选择 \(A\) 的一个质因数 \(P\),将 \(A\) 变为 \(\frac{A}{P}\),将 \(B\) 变为 \(BP\)。

求经过若干次操作后序列最大公因数的最大值,以及此情况下操作的最小次数。

思路

每次操作不会改变序列总共的质因数和次数。

想要最大公因数最大,必须让质因数的次数平均分配给每个数。

现将每个数都质因数分解,次数加起来。

容易发现每个质因数的次数 \(c\),对答案的共献为 \(\lfloor\frac{c}{n}\rfloor\)。

对于操作次数,如果 \(A_i\) 的质因数 \(p_i\) 的次数为 \(c_i\),并且 \(c_i\) 小于答案中 \(p_i\) 的次数 \(C_i\),对答案就有贡献。

\(A_i\) 至少会操作 \(C_i-c_i\) 次把外面的质因数 \(p_i\) 收集 回来, 答案加上 \(C_i-c_i\)。

代码

#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 5;
int n, a[N], c[N], ans1 = 1, ans2; 
int q[N], tot, b[N];
int qpow(int a, int p) {
	int res = 1;
	for (; p; p >>= 1, a *= a)
		if (p & 1) res *= a;
	return res;
}
int main() {
	cin >> n;
	for (int i = 1; i <= n; i ++) cin >> a[i];
	for (int i = 1, t; i <= n; i ++) {
		t = a[i];
		for (int j = 2; j * j <= a[i]; j ++) {
			if (t % j) continue;
			if (!c[j]) q[++ tot] = j;
			while (t % j == 0) t /= j, c[j] ++;
		}
		if (t != 1) {
			if (!c[t]) q[++ tot] = t;
			c[t] ++;
		}
	}
	for (int i = 1; i <= tot; i ++) c[q[i]] /= n;
	for (int i = 1; i <= tot; i ++) ans1 *= qpow(q[i], c[q[i]]);
	for (int i = 1, t; i <= n; i ++) {
		t = a[i];
		for (int j = 2; j * j <= a[i]; j ++) {
			if (t % j) continue;
			while (t % j == 0) t /= j, b[j] ++;
		}
		if (t != 1) b[t] ++;
		for (int j = 1; j <= tot; j ++) ans2 += max(0, c[q[j]] - b[q[j]]);
		t = a[i];
		for (int j = 2; j * j <= a[i]; j ++) {
			if (t % j) continue;
			while (t % j == 0) t /= j, b[j] --;
		}
		if (t != 1) b[t] --;
	}
	cout << ans1 << " " << ans2 << "\n";
	return 0;
}

标签:0829,int,res,T3,次数,操作,质因数,公因数
From: https://www.cnblogs.com/maniubi/p/18387436

相关文章

  • T240829 【用Liouville定理证明代数学基本定理】
    [T240829]代数学基本定理:在复平面上次数大于\(1\)的一元多项式至少有一个零点.引理(Liouville)有界整函数\(f(z)\)必为常数.证:设\(|f(z)|\)有上界\(M\).即\(\forallz\in\C,~|f(z)|\leM\).于是由Cauchy不等式,对\(\foralla\in\C\),有\[0\le|f'(a)|\le......
  • 0828-T3 天气预报
    0828-T3天气预报题意有\(4\times4\)的村庄,有一朵\(2\times2\)的云,需要控制云上下左右移动,保证每个村庄都不会连续\(7\)天以上不下雨,也不会在不能下雨的时间下雨。问是否可以做到。思路搜索。需要注意的是打标记时只用记录时间,云的位置,四个角落的村庄连续未下雨的天......
  • NOI2024 D1T3 口胡题解
    NOI2024D1T3口胡题解题目条件其实就是说对于点对\((a,b)\),从\(a\)到\(b\)的路径上至少要有一条从\(b\)指向\(a\)​的边。将初始状态记作\((T,S)\)​,其中\(T\)​是树,\(S\)​是二元组\((a,b)\)​的集合。注意到特殊性质A蕴含了:如果对于所有二元组\((a,b)\),\(a......
  • nuxt3项目自定义环境变量,typescript全局提示
    最近使用nuxt3框架来写项目,其中有一点就是typescript语法提示让人闹心,使用vscode编辑器,如果有语法提示进行编码,工作效率可以提升一个档次。本篇文章说的就是如何在vscode中使用nuxt3框架,自定义环境变量,支持typescript语法提示。列出当前使用的环境版本node#21.4.0......
  • 最完整版-Springboot3集成Knife4j
    一,前言    在使用swagger-bootstrap-ui时我觉得它的样式和蓝色主色调不符合我的审美,所以我觉得使用一个更强的工具 Knife4j。Knife4j是一个用于SpringBoot和SpringCloud的增强Swagger的工具,提供黑色主题和更多配置选项。Knife4j在更名之前,原来的名称是叫swagger-boots......
  • Nuxt3 全局变量接口前缀全局配置,全局方法,全局状态管理
    接口前缀全局配置,全局变量1.像api前缀这类的全局变量一般配置在nuxt.config.ts文件中。如下:nuxt.config.ts可以在public下定义全局变量,且public下的变量可以在客户端和服务端使用在其他任意vue或者js、ts文件中,可通过以下方式获取变量const{public:{apiBase}}=u......
  • 「代码随想录算法训练营」第四十五天 | 图论 part3
    目录101.孤岛的总面积DFS思路BFS思路102.沉没孤岛103.水流问题104.建造最大岛屿101.孤岛的总面积题目链接:https://kamacoder.com/problempage.php?pid=1173文章讲解:https://programmercarl.com/kamacoder/0101.孤岛的总面积.html题目状态:看题解DFS思路思路:代码结构......
  • vant3升级vant4后,使用Toast、Dialog报样式不存在异常解决方法
    异常现象:vant3升级vant4,直接采用v4的方法使用showToast/showDialog,但直接就报错了,如下:[vite]Internalservererror:Failedtoresolveimport"E:/git_sh/project_code/node_modules/vant/es/show-confirm-dialog/style"from"src\service\index.ts".Doesthefile......
  • SBT30100VFCT-ASEMI无人机专用SBT30100VFCT
    编辑:llSBT30100VFCT-ASEMI无人机专用SBT30100VFCT型号:SBT30100VFCT品牌:ASEMI封装:TO-220F批号:最新最大平均正向电流(IF):30A最大循环峰值反向电压(VRRM):100V最大正向电压(VF):0.70V~0..90V工作温度:-65°C~175°C反向恢复时间:35ns芯片个数:2芯片尺寸:74mil引脚数量:3正向浪涌电流......
  • Nuxt3 使用animate.css来实现页面切换过渡效果
    首先,如果两个page分别在不同的layout下,是无法使用pageTransition来实现切换效果的,这时候需要使用layoutTransition来实现切换效果这里采用npmpackage的方式安装animate.css,当然采用cdn的形式也是可以的npmianimate.css然后在app.vue中导入<scriptsetup>import"anima......