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.mzph.cn/news/658146.shtml

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

相关文章

2024.1.30

快速排序降序 #include<stdio.h> #include<string.h> #include<stdlib.h> int quick_sort(int arr[],int low,int high) {//基准值int keyarr[low];int low1low,high1high;if(low>high) return 0;while(low<high) {//high开始比较while(low1<high1…

安卓native报错:.cmake\api\v1\reply was not a directory

目录 前言一、报错信息二、报错分析总结 前言 之前编译的native工程提示找不到变量&#xff0c;使用Android studio新建的native工程也报错&#xff0c;这个原因苦了我好久&#xff0c;今天有时间仔细分析了下&#xff0c;希望能对同样有此问题的小伙伴有帮助。 一、报错信息…

提高 NFS Azure 文件共享性能

本文内容 适用于增加预读大小以提高读取吞吐量Nconnect另请参阅 本文介绍如何提高 NFS Azure 文件共享的性能。 适用于 展开表 文件共享类型SMBNFS标准文件共享 (GPv2)、LRS/ZRS 标准文件共享 (GPv2)、GRS/GZRS 高级文件共享 (FileStorage)、LRS/ZRS 增加预读大…

炒黄金 vs 炒股:探寻投资路线的差异和各自的优势

在当前不景气的股市&#xff0c;人们越来越关注分散投资的方式&#xff0c;以期降低风险并稳定资产。炒黄金成为了一个备受关注的投资选择&#xff0c;与传统炒股相比&#xff0c;它到底有什么区别呢&#xff1f;本文将从多个维度深入分析这两种投资方式的差异以及各自的优势。…

企业数字化转型会遇到哪些问题?思路是怎样的?

企业数字化转型在互联网时代的迅速发展下&#xff0c;行业领军企业都在逐步实现数字经济的发展&#xff0c;响应国家号召&#xff0c;将数字化技术应用完全应用到自身的企业&#xff0c;以提升企业价值。 那企业为什么要进行数字化转型呢? 数字化转型是在企业信息化已经完成的…

【Matplotlib】科研绘图——折线图

文章目录 1、导入2、定义Font及Style3、设置图像大小及坐标刻度4、数据准备5、自定义draw6、其他设置7、效果图 1、导入 import matplotlib import matplotlib.pyplot as plt from matplotlib.backends.backend_pdf import PdfPages import numpy as np import pandas as pd %…

上海泗博EtherCAT转PROFINET网关TEC-380助力汇川伺服与西门子PLC实现高效协同

背景 在食品饮料生产线中&#xff0c;正杯机以其高精度的定位和运动控制能力确保每个杯子的精准填充与严密封口&#xff0c;而这一切得益于伺服驱动器的强大支持。 浙江某饮料加工生产线&#xff0c;中控系统使用S7-1511PLC控制伺服驱动器作为正杯机的动力与控制核心&#xff0…

探索1688店铺所有商品API接口:一键获取海量数据,开启商业智能新篇章

1688店铺所有商品API接口技术详解 一、概述 1688店铺所有商品API接口是阿里巴巴提供的一套应用程序接口&#xff0c;允许第三方开发者获取指定1688店铺下的所有商品信息。通过使用这个接口&#xff0c;开发者可以获取到店铺内所有商品的列表、详情、属性等信息&#xff0c;从…

JUC并发编程-四大函数式接口、Stream 流式计算、ForkJoin并行执行任务

12. 四大函数式接口 新时代的程序员&#xff1a;lambda表达式、链式编程、函数式接口、Stream流式计算 函数式接口&#xff1a;只有一个方法的接口&#xff0c;可以有一些默认的方法 如&#xff1a;Runnable接口函数 1&#xff09;Function 函数型接口 public class Functio…

二十大计算机专业证书,让你从芸芸众生中脱颖而出

目录 一. 前言 二. 计算机专业证书 三. 国内认证 3.1. 计算机技术与软件专业资格考试证书&#xff08;软考&#xff09; 3.2. 通信专业技术人员职业水平证书 3.3. 全国计算机等级考试证书&#xff08;NCRE&#xff09; 3.4. 全国计算机应用水平考试证书&#xff08;NIT&a…

###C语言程序设计-----C语言学习(8)## 斐波那契数列问题,素数问题,人数分配问题。

前言&#xff1a;感谢您的关注哦&#xff0c;我会持续更新编程相关知识&#xff0c;愿您在这里有所收获。如果有任何问题&#xff0c;欢迎沟通交流&#xff01;期待与您在学习编程的道路上共同进步。 今天&#xff0c;我们主要分享三个问题如何用C语言去求解&#xff0c;1.斐波…

Flutter使用cmd命令和调用bat文件

前言 在windows上写程序难免会遇到调用cmd命令和bat的文件去执行一些功能&#xff0c;使用了flutter官方的工具调用体验非常不好。 于是翻了一下有没有第三方的&#xff0c;找到了cmd_plus 使用了一下非常好用。 集成 使用pub搜索 cmd_plus 注意cmd是不支持web的&#xff0c;…

研学活动报名平台源码开发方案

一、项目背景与目标 &#xff08;一&#xff09;项目背景 研学活动报名平台旨在为活动组织者提供方便快捷的研学活动管理工具&#xff0c;同时为用户提供全面的活动搜索、报名和支付等功能。通过该系统&#xff0c;活动组织者能够更好地管理活动报名信息&#xff0c;用户也可…

【LeetCode: 25. K 个一组翻转链表 + 链表 + 递归】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

纯静态微信小程序水果商城

首页代码 <view class"container"><!-- 轮播图 --><view class"swiper-container"><swiper class"screen-swiper" indicator-dots"true" circular"true" autoplay"true" interval"300…

大学生以C语言为开始怎样学好编程呢?

大学生以C语言为开始怎样学好编程呢&#xff1f; 在开始前我分享下我的经历&#xff0c;刚入行时遇到一个好公司和师父&#xff0c;给了我机会&#xff0c;两年时间从3k薪资涨到18k的&#xff0c; 我师父给了一些C语言学习方法和资料&#xff0c;让我不断提升自己&#xff0c;…

普通人怎么做Temu跨境电商项目?这几点要了解

随着全球电商市场的蓬勃发展&#xff0c;越来越多的人开始关注跨境电商领域。Temu作为拼多多旗下的跨境电商平台&#xff0c;以其独特的商业模式和强大的供应链能力吸引了众多普通人的关注。那么&#xff0c;作为一个普通人&#xff0c;如何才能做好Temu跨境电商项目呢?接下来…

ChatGPT可与自定义GPTs一起使用,智能AI代理时代来啦!

1月31日凌晨&#xff0c;OpenAI在社交平台公布了一个超强新功能&#xff0c;可以在ChatGPT中输入“GPTs名字”的方法&#xff0c;调用多个自定义GPTs一起协同工作。 例如&#xff0c;我想开发一款社交APP&#xff0c;1&#xff09;可以先用专业分析GPTs做一下市场调研&#xf…

小猪o2o生活通系统更新到了v24.1版本了php文件开源了提供VUE了但是车牌识别功能你真得会用吗

一.车牌识别设置项 车牌识别设置项总开关&#xff1a;系统后台-社区管理-社区配置-车牌识别配置。 平台需要开启车牌识别功能&#xff0c;其次平台可以选择车牌识别功能是由平台配置还是小区自己配置有需要提供代码的可以Q我昵称注明&#xff1a;CSDN网友。如果是平台自己配置&…

部署PXE高效批量网络装机

部署PXE高效批量网络装机 因在Cisco3850核心交换机中已开启DHCP 服务&#xff0c;因此不需要在配置DHCP服务。如果您的网络环境中也已有DHCP服务&#xff0c;也不用再配置DHCP服务了&#xff0c;直接部署PXE相关服务即可。 找一台linux系统的服务器&#xff0c;这本次试验用的是…