当前位置: 首页 > news >正文

CF2167D 学习笔记

本蒟蒻的第六篇题解,求管理员通过。

正题

题意

对于每组测试数据:
给定一个长度为 \(n\) 的数组 \(a_n\),求一个最小的整数 \(x\) 使得能找到一个 \(a_i\) 满足 \(\gcd(a_i,x)=1\)

分析

暴力思路:直接从 \(1\) 开始一直枚举,直到找到满足题干条件的数输出。
结果——竟然 AC 了!所以这题是不是红题。

优化思路 1:可以对 \(\{a_n\}\) 中所有的数求最大公约数,这样就可以省略从下标 \(1\) 枚举到 \(n\) 的动作,时间复杂度大大降低。

然而——还可以优化:

优化思路 2:从小到大枚举质数即可。又注意到

\[2 \times 3 \times 5 \times 7 \times 11 \times 13 \times 17 \times 19 \times 23 \times 29 \times 31 \times 37 \times 41 \times 43 \times 47 \times 53 > 10^{18} \]

故最多只用枚举到 \(53\) 即可。

正确性说明:因为如果存在一个合数 \(o\) 使得 \(\gcd(a_i,o)=1\),则这个合数在分解质因数后的质因子 \(p\) 也会使得 \(\gcd(a_i,p)=1\),所以枚举质数就可以了。

code

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <iterator>
#include <map>
#include <unordered_map>
#include <queue>
#include <string>
#include <cstring>
#include <set>
#include <bitset>
#include <unordered_set>
#include <vector>
#include <deque>
#include <iomanip>
#include <fstream>
#include <sstream>
#include <list>
#include <array>
#include <iterator>
#include <cmath>
#include <new>
#include <random>
#include <cfloat>
#include <cstdlib>
#include <climits>
#include <numeric>
#include <complex>
#include <ctime>
#include <chrono>
#include <thread>
#include <mutex>
#include <future>
#include <exception>
#include <stdexcept>
#include <cstdint>
#include <cassert>
#include <stack>
#include <cctype>
#define Ofile(s) freopen(s".in", "r", stdin), freopen (s".out", "w", stdout)
#define Cfile(s) fclose(stdin), fclose(stdout)
#define fast ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
#define maxn 1000005
#define maxm 55//好习惯
#define int long long//强调那么多遍,总有人忘记
#define inf 2147483647
using namespace std;int t, n, sum;int a[maxn], prime[maxm];bool isprime(int x) {if (x <= 1)return false;for (int i = 2; i * i <= x; i++)if (x % i == 0)return false;return true;
}void init() {for (int i = 2; i <= 53; i++)if (isprime(i))prime[++sum] = i;//预处理
}int getgcdsum() {int gcc = a[1];for (int i = 2; i <= n; i++)gcc = __gcd(gcc, a[i]);return gcc;//全数列的大公因
}signed main() {
#ifndef ONLINE_JUDGE// Ofile("");// Cfile("");
#endifinit();cin >> t;while (t--) {cin >> n;fill(a + 1, a + n + 1, 0);for (int i = 1; i <= n; i++)cin >> a[i];int minn = inf, gcc = getgcdsum();for (int i = 1; i <= sum; i++)if (__gcd(gcc, prime[i]) == 1)minn = min(minn, prime[i]);//枚举if (minn == inf)cout << -1 << endl;//记得换行else cout << minn << endl;}return 0;
}
http://www.jsqmd.com/news/334036/

相关文章:

  • MATLAB环境下基于数据驱动与协方差驱动的随机子空间结构模态参数识别方法
  • 【重磅】有实力的深圳小红书广告代理口碑排行榜单 - 服务品牌热点
  • 【重磅】最好的深圳小红书广告代理推荐排行榜 - 服务品牌热点
  • java-springboot基于java的校运动会信息管理系统 SpringBoot高校田径运动会综合运营平台 Java工艺栈校园体育赛事智能编排与成绩统计系统计算机毕业设计
  • 【1.总结汉诺塔问题】【递归的数学定义,递归函数的构建框架】
  • HTTP状态码大全:从200到504,每个码代表什么?
  • 2026 无锡本地生活代运营榜单出炉!榜首实力断层领先 - 野榜数据排行
  • 单人电饭锅煮**方便面**/**大米饭** 精准时间
  • macOS Framework 使用指南(面向 Linux 开发者)以火山引擎实时音视频 SDK 为例 - 教程
  • CF2167C 学习笔记
  • <span class=“js_title_inner“>融资30亿后,曦望发布推理GPU芯片S3 从拼参数到算清账</span>
  • <span class=“js_title_inner“>聚焦端到端的公司和高校,越来越多了......</span>
  • 无酱方便面VS米饭
  • <span class=“js_title_inner“>端到端VLA壁垒,被打下来了......</span>
  • <span class=“js_title_inner“>专访王湛:从百度创始元老到曦望联席CEO</span>
  • 决策与增长:2026年GEO源头厂家的终极测评——为何摘星AI连续登顶? - 2026年企业推荐榜
  • <span class=“js_title_inner“>SegGISv3 添加后处理功能,视屏教程</span>
  • 短视频创作变现从 0 到 1:新手也能接住的实用指南
  • 18650电芯全自动点焊机:提升移动电源生产效能的关键设备
  • 【重磅】评价高的深圳小红书广告代理品牌 - 服务品牌热点
  • 红客是什么?红客需要传承!零基础入门到精通,看这篇就够了!赶紧收藏!
  • 网络划分与系统安全
  • 2026年适合办公室吃的零食品牌排行前十、挑选指南及选购建议,送给热爱生活的你! - Top品牌推荐
  • 2025CRM品牌排行榜:五大厂商系统业务流程闭环能力深度对比
  • 2026年了,你还在用传统滚动监听做懒加载?试试这种现代方案
  • 2026报废车回收服务推荐:郯城众联再生资源,专业回收/办理/流程全解析 - 品牌推荐官
  • 读懂主力资金的3个信号,轻松跟上下一波主升浪
  • 常见的5种黑客类型
  • # 2026年2月GEO源头厂家权威排名,摘星AI第一!——市场深度测评与选型指南 - 2026年企业推荐榜
  • 【必学收藏】小白也能上手!腾讯元器2.0构建AI问诊Agent全流程