求和(打表题)

题目

打个表发现当 n = p^{k}时答案为 p ,否则为 1 ,然后套板子。

#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>
#include <cmath>using namespace std;#define int long long
using i64 = long long;const int N = 1000100;
const i64 inf = 1e18 + 1;
const int mod = 998244353;int n, m, primes[N], cnt;
bool st[N];void init(int n = 1000010) {for (int i = 2; i <= n; i++) {if (!st[i]) primes[cnt++] = i;for (int j = 0; j < cnt && primes[j] * i <= n; j++) {st[i * primes[j]] = true;    if (i % primes[j] == 0) break;}}
}i64 sqrt(i64 x) {i64 l = 0, r = 1e9;while (l < r) {i64 mid = l + r + 1 >> 1;if (1ll * mid * mid <= x) l = mid;else r = mid - 1;}return l;
}bool is_prime(i64 n) {if (n == 1) return 0;for (i64 i = 2; i <= n / i; i++)if (n % i == 0) return false;return 1;
}long long quick_pow(long long x, long long p, long long mod) {  // 快速幂long long ans = 1;while (p) {if (p & 1) ans = (__int128)ans * x % mod;x = (__int128)x * x % mod;p >>= 1;}return ans;
}bool Miller_Rabin(long long p) {  // 判断素数if (p < 2) return 0;if (p == 2) return 1;if (p == 3) return 1;long long d = p - 1, r = 0;while (!(d & 1)) ++r, d >>= 1;  // 将d处理为奇数for (long long k = 0; k < 10; ++k) {long long a = rand() % (p - 2) + 2;long long x = quick_pow(a, d, p);if (x == 1 || x == p - 1) continue;for (int i = 0; i < r - 1; ++i) {x = (__int128)x * x % p;if (x == p - 1) break;}if (x != p - 1) return 0;}return 1;
}signed main() {init();int T;cin >> T;while (T--) {srand((unsigned)time(NULL));i64 n;cin >> n;if (n == 1) {std::cout << 1 << " ";continue;}if (Miller_Rabin(n)) {std::cout << n % mod << " ";continue;}i64 res = inf;i64 t = sqrt(n);if (t * t == n) {  if (is_prime(t)) {cout << t % mod << ' ';continue;}}for (int i = 0; i < cnt; i++) {i64 p = primes[i];if (n % p == 0) {i64 tmp = n;while (tmp % p == 0) tmp /= p;if (tmp == 1) res = p;else res = 1;}}if (res == inf) res = 1;cout << res % mod << ' ';}exit(0);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/227670.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker+Anaconda+CUDA+cuDNN

一、导语 因为要复现文献的需求和实验室里师兄想要给我提升能力的多方面因素在一起&#xff0c;所以学习并实现了相关安装。在这里做一个记录&#xff0c;方便日后查看&#xff0c;如果能给其他同学带来便捷就更好了。 在这篇文章中&#xff0c;我的目标是搭建一个可以使用Py…

【运维】hive 高可用详解: Hive MetaStore HA、hive server HA原理详解;hive高可用实现

文章目录 一. hive高可用原理说明1. Hive MetaStore HA2. hive server HA 二. hive高可用实现1. 配置2. beeline链接测试3. zookeeper相关操作 一. hive高可用原理说明 1. Hive MetaStore HA Hive元数据存储在MetaStore中&#xff0c;包括表的定义、分区、表的属性等信息。 hi…

ArrayList 和 HashMap 源码解析

1、ArrayList 1.1、ArrayList 构造方法 无参创建一个 ArrayList 数组默认为空数组 transient Object[] elementData; private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA {}; private int size; // 数组容量大小public ArrayList() {this.elementData DEFA…

JAVA基础进阶(九)

一、日志技术 程序中的日志可以用来记录程序运行过程中的信息&#xff0c;并可以进行永久存储。一旦业务出现问题&#xff0c;可以通过日志信息去定位。 二、日志技术的优势 可以将系统执行的信息选择性的记录到指定的位置&#xff08;控制台、文件中、数据库中&#xff09;。…

选择排序以及改进方案

选择排序以及改进方案 介绍&#xff1a; 选择排序是一种简单直观的排序算法&#xff0c;它的基本思想是在未排序序列中选择最小&#xff08;或最大&#xff09;的元素&#xff0c;然后将其放在已排序序列的末尾。选择排序的过程就像是每次从待排序的元素中选择最小的一个&…

2024年天津艺术职业学院专升本报名工作的通知

天津艺术职业学院关于2024年天津市高职升本科考试报名工作的通知 请天津艺术职业学院各位2024届大专应届毕业生&#xff08;含高职扩招2024年应届毕业生&#xff09;查阅以下通知。 一、网上报名 &#xff08;一&#xff09;时间及网址&#xff1a;请于2023年12月4日9:00至6日…

【Vue】绝了!这生命周期流程真...

hello&#xff0c;我是小索奇&#xff0c;精心制作的Vue系列持续发放&#xff0c;涵盖大量的经验和示例&#xff0c;如果对您有用&#xff0c;可以点赞收藏哈~ 生命周期 Vue.js 组件生命周期&#xff1a; 生命周期函数&#xff08;钩子&#xff09;就是给我们提供了一些特定的…

Net6.0或Net7.0项目升级到Net8.0 并 消除.Net8中SqlSugar的警告

本文基于NetCore3.1或Net6.0项目升级到Net7.0&#xff0c;参考连接&#xff1a;NetCore3.1或Net6.0项目升级到Net7.0-CSDN博客 所有项目按照此步骤操作一遍&#xff0c;完成后再将所有引用的包&#xff08;即 *.dll&#xff09;更新升级到最新版&#xff08;注意&#xff1a;有…

Spark---资源、任务调度

一、Spark资源调度源码 1、Spark资源调度源码过程 Spark资源调度源码是在Driver启动之后注册Application完成后开始的。Spark资源调度主要就是Spark集群如何给当前提交的Spark application在Worker资源节点上划分资源。Spark资源调度源码在Master.scala类中的schedule()中进行…

leetCode 17.电话号码的字母组合 + 回溯算法 + 图解 + 笔记

17. 电话号码的字母组合 - 力扣&#xff08;LeetCode&#xff09; 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 1&…

类指针压缩空间

一、类指针压缩介绍 压缩指针&#xff0c;指的是在 64 位的机器上&#xff0c;使用 32 位的指针来访问数据&#xff08;堆中的对象或 Metaspace 中的元数据&#xff09;的一种方式。 对象头中的 Class Pointer 默认占 8 个字节&#xff0c;开启 -XX:UseCompressedOops 后&…

文本生成超逼真歌曲,谷歌推出音乐模型Lyria

转换示例 谷歌旗下的DeepMind与视频平台YT合作&#xff0c;发布了目前最先进的音乐模型——Lyria。 为了突破传统音乐模型的生硬机器感&#xff0c;谷歌汇集了多个部门并与Charlie Puth、T-Pain、Troye Sivan等9位知名音乐人共同研发了Lyria。 Lyria可生成爵士、重金属、摇滚…