CCF-CSP 202312-2 因子化简(Java、C++、Python)

文章目录

  • 因子化简
    • 题目背景
    • 问题描述
    • 输入格式
    • 输出格式
    • 样例输入
    • 样例输出
    • 样例解释
    • 子任务
  • 满分代码
    • Java
    • C++
    • Python
    • 线性筛法

因子化简

题目背景

质数(又称“素数”)是指在大于 1 的自然数中,除了 1 和它本身以外不再有其他因数的自然数。

问题描述

P 同学在学习了素数的概念后得知,任意的正整数 n n n 都可以唯一地表示为若干素因子相乘的形式。如果正整数 n n n m m m 个不同的素数因子 p 1 , p 2 , ⋯ , p m p_1,p_2,\cdots,p_m p1,p2,,pm,则可以表示为: n = p 1 t 1 × p 2 t 2 × ⋯ × p m t m n=p_1^{t_1}\times p_2^{t_2}\times\cdots\times p_m^{t_m} n=p1t1×p2t2××pmtm

小 P 认为,每个素因子对应的指数 t i t_i ti 反映了该素因子对于 n n n 的重要程度。现设定一个阈值 k k k,如果某个素因子 p i p_i pi 对应的指数 t i t_i ti 小于 k k k,则认为该素因子不重要,可以将 p i t i p_i^{t_i} piti 项从 n n n 中除去;反之则将 p i t i p_i^{t_i} piti 项保留。最终刺余项的乘积就是 n n n 简化后的值,如果没有剩余项则认为简化后的值等于 1

试编写程序处理 q q q 个查询:

  • 每个查询包含两个正整数 n n n k k k,要求计算按上述方法将 n n n 简化后的值。

输入格式

从标准输入读入数据。

输入共 q + 1 q+1 q+1 行。

输入第一行包含一个正整数 q q q,表示查询的个数。

接下来 q q q 行每行包含两个正整数 n n n k k k,表示一个查询。

输出格式

输出到标准输出。

输出共 q q q 行。

每行输出一个正整数,表示对应查询的结果。

样例输入

3
2155895064 3
2 2
10000000000 10

样例输出

2238728
1
10000000000

样例解释

查询一:

  • n = 2 3 × 3 2 × 2 3 4 × 107 n=2^3\times3^2\times23^4\times107 n=23×32×234×107
  • 其中素因子 3 指数为 2, 107 指数为 1。将这两项从 n n n 中除去后,剩余项的乘积为 2 3 × 2 3 4 = 2238728 2^3\times23^4=2238728 23×234=2238728

查询二:

  • 所有项均被除去。输出 1

查询三:

  • 所有项均保留,将 n n n 原样输出。

子任务

40% 的测试数据满足: n ≤ 1000 n\leq1000 n1000

80% 的测试数据满足: n ≤ 1 0 5 n\leq10^5 n105

全部的测试数据满足 : 1 < n ≤ 1 0 10 :1<n\leq10^{10} :1<n1010 1 < k , q ≤ 10 1<k,q\leq10 1<k,q10

满分代码

注意到: 对于 n n n,仅有一个最大素因子 m m m 可能大于 n \sqrt n n ,也就是说我们只需要除去 2 ∼ n 2 \sim \sqrt n 2n 的素因子就可以得到 m m m,所以对于全部数据 n ≤ 1 0 10 n \leq 10^{10} n1010,我们只需要求出 2 ∼ 1 0 5 2 \sim 10^5 2105 中所有质数即可,直接用试除法,稍微优化一下时间复杂度也就 1 0 7 10^7 107,可以通过,如果数据 n ≤ 1 0 14 n\leq10^{14} n1014 就需要使用线性筛法了。

在这里插入图片描述

Java

import java.util.*;
import java.io.*;public class Main {static QuickInput in = new QuickInput();static PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));static int max = 100007;public static void main(String[] args) throws IOException {long q = in.nextLong();List<Integer> list = new ArrayList<>();for (int i = 2; i < max; i++) check(i, list);for (int i = 0; i < q; i++) {long n = in.nextLong(), k = in.nextLong();long ans = n;int[] cnt = new int[max];for (int j : list) {if (n == 1) break;while (n % j == 0) {n /= j;cnt[j]++;}}ans /= n;for (int j = 0; j < max; j++) {if (cnt[j] < k && cnt[j] != 0) {ans /= Math.pow(j, cnt[j]);}}out.println(ans);}out.flush();}static void check(int n, List<Integer> list) {for (int i : list) {if (i * i > n) break;if (n % i == 0) return;}list.add(n);}static class QuickInput {StreamTokenizer input = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));long nextLong() throws IOException {input.nextToken();return (long) input.nval;}}
}

C++

#include<bits/stdc++.h>
using namespace std;const int max_val = 1e5;void check(int n, vector<int>& list) {for (int i : list) {if (i * i > n) break;if (n % i == 0) return;}list.push_back(n);
}int main() {ios::sync_with_stdio(false);cin.tie(0);int max = max_val;long long q;cin >> q;vector<int> primeList;for (int i = 2; i < max; i++) {check(i, primeList);}for (int i = 0; i < q; i++) {long long n, k;cin >> n >> k;long long ans = n;vector<int> cnt(max_val, 0);for (int j : primeList) {if (n == 1) break;while (n % j == 0) {n /= j;cnt[j]++;}}ans /= n;for (int j = 0; j < max_val; j++) {if (cnt[j] < k && cnt[j] != 0) {ans /= pow(j, cnt[j]);}}cout << ans << endl;}return 0;
}

Python

max_val = 100000
primes = []
for i in range(2, max_val):if all(i % p != 0 for p in primes if p * p <= i):primes.append(i)q = int(input())
for _ in range(q):n, k = map(int, input().split())ans = ncnt = [0] * max_valfor prime in primes:while n % prime == 0:n //= primecnt[prime] += 1ans //= nfor prime, t in enumerate(cnt):if t < k and t != 0:ans //= pow(prime, t)print(ans)

线性筛法

max_val = 100000
is_prime = [True] * (max_val + 1)
primes = []for i in range(2, max_val + 1):if is_prime[i]:primes.append(i)for j in range(len(primes)):if i * primes[j] > max_val:breakis_prime[i * primes[j]] = Falseif i % primes[j] == 0:break

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

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

相关文章

现货白银的交易策略包括哪些内容?如何适应策略?

交易策略被投资者视为做现货白银交易通向盈利之路的必备工具&#xff0c;但是投资者却不知道如何建立一个适合自己的交易策略&#xff0c;如果直接拿别人的交易策略过来&#xff0c;就犯了拿来主义的毛病&#xff0c;这样是不行的&#xff0c;下面我们就来简单讨论一下如何建立…

Linux操作系统概述

操作系统&#xff08;Operating System&#xff09;的定义 操作系统&#xff0c;是指直接管理系统硬件和资源&#xff08;如 CPU、内存和存储空间&#xff09;的软件。 操作系统的基本功能 ①统一管理计算机资源&#xff1a;处理器资源&#xff0c;IO设备资源&#xff0c;存储…

使用AXI GPIO IP核点亮led

本例程使用SD卡启动模式 创建工程模板在hello_world中已经介绍过了&#xff0c;这里直接从配置完zynq ip核开始 点击加号&#xff0c;搜索GPIO&#xff0c;双击添加AXI GPIO IP核 双击 GPIO IP 核进行设置&#xff0c;设置为输出模式&#xff0c;位宽为4&#xff0c;设置完成后…

超过1000种工具揭示了单细胞RNA数据分析的趋势

文章&#xff1a;Over 1000 tools reveal trends in the single-cell RNA-seq analysis landscape 杂志&#xff1a;Genome Biology 年份&#xff1a;2021 从 2016 年开始&#xff0c;scRNA-tools 数据库&#xff08;https://www.scrna-tools.org/&#xff09;不断收集单细胞转…

el-input 显示最大长度和已输入内容长度

效果如下图 多行文本框&#xff1a; 单行文本框&#xff1a; 需要设置 maxlength 和 show-word-limit 两个属性&#xff0c;在使用 maxlength 属性限制最大输入长度的同时&#xff0c;可通过设置 show-word-limit 属性来展示字数统计。 <el-inputtype"textarea&quo…

ElasticSearch面试题整理(持续更新)

1. Elasticsearch 中的倒排索引是什么&#xff1f; Elasticsearch 使用一种称为倒排索引的结构&#xff0c;ES中的倒排索引其实就是 lucene 的倒排索引&#xff0c;区别于传统的正向索引&#xff0c;倒排索引会再存储数据时将关键词和数据进行关联&#xff0c;保存到倒排表中&…

医院如何筛选安全合规的内外网文件交换系统?

医院内外网文件交换系统是专为医疗机构设计的&#xff0c;用于在内部网络&#xff08;内网&#xff09;和外部网络&#xff08;外网&#xff09;之间安全、高效地传输敏感医疗数据和文件的解决方案。这种系统对于保护患者隐私、遵守医疗数据保护法规以及确保医疗服务的连续性和…

Angular组件(二) 分割面板ShrinkSplitter

Angular组件(二) 分割面板ShrinkSplitter 前言 在Angular组件(一) 分割面板ShrinkSplitter文章中我们实现了Splitter组件&#xff0c;后来在业务场景中发现在开关右侧容器和底部容器时&#xff0c;使用起来不方便&#xff0c;ngModel绑定的值始终是左侧容器和顶部容器的大小&…

顺序表的奥秘:高效数据存储与检索

&#x1f37f;顺序表 &#x1f9c0;1、顺序表的实现&#x1f365;1.1 创建顺序表类&#x1f365;1.2 插入操作&#x1f365;1.3 查找操作&#x1f365;1.4 删除操作&#x1f365;1.5 清空操作 &#x1f9c0;2、ArrayList的说明&#x1f9c0;3、ArrayList使用&#x1f365;3.1 A…

网络安全全栈培训笔记(59-服务攻防-中间件安全CVE复现lSApacheTomcataNginx)

第59天 服务攻防-中间件安全&CVE复现&lS&Apache&Tomcata&Nginx 知识点&#xff1a; 中间件及框架列表&#xff1a; lIS,Apache,Nginx,Tomcat,Docker,Weblogic,JBoos,WebSphere,Jenkins, GlassFish,Jira,Struts2,Laravel,Solr,Shiro,Thinkphp,Sprng,Flask,…

使用流服务器m7s对接gb28181

优&#xff1a;sip品牌兼容性比较好&#xff0c;大华&#xff0c;海康都稳定可以&#xff0c;srs的5.0 sip品牌兼容性大华没反应&#xff0c;akstream-sip 大华也有问题&#xff0c;wvp也还可以 缺&#xff1a;目前最新的4.7.4版本&#xff0c;&#xff0c;sip协议用udp正常&a…

从零开始 Linux(一):基础介绍与常用指令总结

从零开始 Linux 01. 概念理解 1.1 什么是 Linux&#xff1f; Linux 是一个开源免费的 操作系统&#xff0c;具有很好的稳定性、安全性&#xff0c;且有很强的处理高并发的能力 Linux 的应用场景&#xff1a; 可以在 Linux 下开发项目&#xff0c;比如 JavaEE、大数据、Python…

Flink中StateBackend(工作状态)与Checkpoint(状态快照)的关系

State Backends 由 Flink 管理的 keyed state 是一种分片的键/值存储&#xff0c;每个 keyed state 的工作副本都保存在负责该键的 taskmanager 本地中。另外&#xff0c;Operator state 也保存在机器节点本地。Flink 定期获取所有状态的快照&#xff0c;并将这些快照复制到持…

Adobe Photoshop 2024 v25.4.0 - 专业的图片设计软件

Adobe Photoshop 2024 v25.4.0更新了&#xff0c;从照片编辑和合成到数字绘画、动画和图形设计&#xff0c;任何您能想象到的内容都能通过PS2024轻松实现。 利用人工智能技术进行快速编辑。学习新技能并与社区分享您的工作。借助我们的最新版本&#xff0c;做令人惊叹的事情从未…

持续集成 CI/CD

CI和CD代表持续集成和持续交付/持续部署。简而言之&#xff0c;CI 是一种现代软件开发实践&#xff0c;其中频繁且可靠地进行增量代码更改。由 CI 触发的自动构建和测试步骤确保合并到存储库中的代码更改是可靠的。然后&#xff0c;作为 CD 流程的一部分&#xff0c;快速、无缝…

Vue打包Webpack源码及物理路径泄漏问题解决

修复前&#xff1a; 找到vue.config.js文件&#xff0c;在其中增加配置 module.exports {productionSourceMap: false,// webpack 配置configureWebpack: {devtool: false,}}修复后&#xff1a;

Docker核心教程

1. 概述 官网&#xff1a;https://docs.docker.com/ Docker Hub 网站&#xff1a;https://hub.docker.com/ 容器较为官方的解释&#xff1a; 一句话概括容器&#xff1a;容器就是将软件打包成标准化单元&#xff0c;以用于开发、交付和部署。 容器镜像是轻量的、可执行的独立…

大数据-Spark-关于Json数据格式的数据的处理与练习

上一篇&#xff1a; 大数据-MapReduce-关于Json数据格式的数据的处理与练习-CSDN博客 16.7 Json在Spark中的引用 依旧利用上篇的数据去获取每部电影的平均分 {"mid":1,"rate":6,"uid":"u001","ts":15632433243} {"m…

【Linux】命名管道

文章目录 命名管道一、命名管道的原理二、命名管道的创建命令行中创建程序中创建 - mkfifo函数&#xff1a; 三、命名管道的使用命名管道实现server&client通信 四、匿名管道与命名管道的区别和联系 命名管道 如果涉及到在文件系统中创建一个有名的管道&#xff0c;那么就…

HarmonyOS模拟器启动失败,电脑蓝屏解决办法

1、在Tool->Device Manager管理界面中&#xff0c;通过Wipe User Data清理模拟器用户数据&#xff0c;然后重启模拟器&#xff1b;如果该方法无效&#xff0c;需要Delete删除已创建的Local Emulater。 2、在Tool->SDK Manager管理界面的PlatForm选项卡中&#xff0c;取消…