Good Numbers(HDU5447+唯一分解)

题目链接

传送门

题面

题意

首先定义对于\(k\)的好数\(u\):如果\(u\leq k\)\(u\)的所有质因子与\(k\)的质因子一样则称\(u\)对于\(k\)是一个好数。
现给你两个数\(k1,k2(1\leq k1,k2\leq 10^{24})\),要你求\(k1,k2\)的好数个数,对于\(k1,k2\)有两者的最大质因子一定相同第二大质因子一定不同。

思路

我们知道对于小于等于\(10^{24}\)的数最多有三个大于\(10^6\)的质因子,因此对于数\(k1,k2\)我们可以先将其小于等于\(10^6\)的质因子全部分离出来,那么最后最多还剩三个质因子的指数相乘。
我们设\(p1,p2,p3\)为二者的最一、二、三大质因子。
如果最后剩余的\(k1,k2\)只剩\(p1\),那么就只能是\(p1\)的幂次,此时可以通过枚举求出\(p1\)的指数,因为大于\(1e6\)的数最多\(3\)次就大于\(10^{24}\)了。
如果最后剩余的\(k1,k2\)\(p1,p2\)的幂次相乘,那么\(gcd(k1,k2)\)一定是\(p1\)的幂次,因为二者的\(p2\)一定不同嘛~这样我们可以通过两次枚举得到其指数。
如果最后剩余的\(k1,k2\)\(p1,p2,p3\)的幂次相乘,那么\(p1,p2,p3\)的指数一定都是\(1\)次。
因为好数的要求是需要质因子与\(k\)相同,所以每个质因子的次数至少为\(1\),所以如果\(k=p_1^{c_1}p_2^{c_2}\dots\),那么答案就是\(\prod\limits_{i=1}^{n}c_i\)

代码实现如下

import java.util.*;
import java.math.*;public class Main {static int cnt = 0;static Boolean v[] = new Boolean[1000007];static int p[] = new int[1000007];public static void init() {for(int i = 0; i <= 1000000; ++i) v[i] = false;for(int i = 2; i <= 1000000; ++i) {if(!v[i]) p[cnt++] = i;for(int j = 0; j < cnt && i * p[j] <= 1000000; ++j) {v[i*p[j]] = true;if(i % p[j] == 0) break;}}}public static int check(BigInteger k) {if (k.equals(BigInteger.ONE)) return 1;BigInteger a = BigInteger.valueOf((long)Math.sqrt(k.doubleValue()));if (k.equals(a.multiply(a))) return 2;a = a.add(BigInteger.ONE);if (k.equals(a.multiply(a))) return 2;BigInteger b = BigInteger.valueOf((long)Math.pow(k.doubleValue(), 1.0/3));if (k.equals(b.multiply(b.multiply(b)))) return 3;b = b.add(BigInteger.ONE);if (k.equals(b.multiply(b.multiply(b)))) return 3;return 1;}public static void main(String[] args) {init();Scanner sc = new Scanner(System.in);int t = sc.nextInt();BigInteger k[] = new BigInteger[5];while(t-- != 0) {for(int i = 0; i < 2; ++i) k[i] = sc.nextBigInteger();long ans[] = new long[5];for(int i = 0; i < 2; ++i) {ans[i] = 1L;for(int j = 0; j < cnt; ++j) {if(k[i].mod(BigInteger.valueOf(p[j])) == BigInteger.ZERO) {long num = 0;while(k[i].mod(BigInteger.valueOf(p[j])) == BigInteger.ZERO) {++num;k[i] = k[i].divide(BigInteger.valueOf(p[j]));}ans[i] *= num;}}}k[2] = k[0].gcd(k[1]);if(k[2].compareTo(BigInteger.valueOf(1000000)) > 0) {int x = check(k[2]);BigInteger g;if(x == 1) g = k[2];else if(x == 2) {BigInteger tmp = BigInteger.valueOf((long)Math.sqrt(k[2].doubleValue()));if(k[2].equals(tmp.multiply(tmp))) g = tmp;else g = tmp.add(BigInteger.ONE);} else {BigInteger tmp = BigInteger.valueOf((long)Math.pow(k[2].doubleValue(), 1.0/3));if(k[2].equals(tmp.multiply(tmp).multiply(tmp))) g = tmp;else g = tmp.add(BigInteger.ONE);}for(int i = 0; i < 2; ++i) {long num = 0;while(k[i].mod(g) == BigInteger.ZERO) {++num;k[i] = k[i].divide(g);}ans[i] *= num;if(k[i].compareTo(BigInteger.valueOf(1000000)) > 0) {ans[i] *= check(k[i]);}}}System.out.println(ans[0] + " " + ans[1]);}sc.close();}
}

对象用\(=\)进行比较是否相等是看地址。
1322898-20190715165149370-131126172.png

转载于:https://www.cnblogs.com/Dillonh/p/11189802.html

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

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

相关文章

从机器码到面向对象

1.从机器码到面向对象 本章节主要探讨是什么驱动着编程从机器码发展到了汇编语言&#xff0c;又从汇编语言发展到了面向过程编程&#xff0c;最后从面向过程编程发展到面向对象编程。通过这些探讨最终明确多年来的软件工程发展我们都解决了哪些棘手的问题。 1.1机器码 在真正…

spfa_队列

spfa:1.当给定的图存在负权边时&#xff0c;Dijkstra等算法便没有了用武之地&#xff0c;而Bellman-Ford算法的复杂度又过高&#xff0c;SPFA算法便派上用场了.2.我们约定有向加权图G不存在负权回路&#xff0c;即最短路径一定存在3.思路&#xff1a;用数组d记录每个结点的最短…

Tomcat配置解析

Tomcat文件配置 tomcat解压后目录 bin&#xff1a;可执行文件&#xff08;startup.bat shutdown.bat) conf&#xff1a;配置文件&#xff08;server.xml&#xff09; lib&#xff1a;tomcat依赖的jar文件 log&#xff1a;日志文件&#xff08;记录出错等信息&#xff09; temp&…

教你配置安全的ProFTPD服务器(中)

二、 基本加固ProFTPD服务器步骤 1.升级版本 注&#xff1a;如果当前版本已经是最新版本&#xff0c;可以跳过第一步。 升级陈旧的ProFTPD版本&#xff0c;因为早期的ProFTPD版本存在的安全漏洞。对于一个新配置的ProFTPD服务器来说使用最新稳定版本是最明智的选择&#xff0c;…

Java 将Word转为PDF、PNG、SVG、RTF、XPS、TXT、XML

同一文档在不同的编译或阅读环境中&#xff0c;需要使用特定的文档格式来打开&#xff0c;通常需要通过转换文档格式的方式来实现。下面将介绍在Java程序中如何来转换Word文档为其他几种常见文档格式&#xff0c;如PDF、图片png、svg、xps、rtf、txt、xml等。 使用工具&#xf…

CentOS7上GitLab的使用

生成SSH Keys 生成root账号的ssh key # ssh-keygen -t rsa -C "adminexample.com" 显示pub key的值 # cat ~/.ssh/id_rsa.pub 复制显示出来的 pub key 以root账号登陆gitlab&#xff0c;点击 "profile settings" 然后点击 "SSH Keys" 将复制的pu…

数据库:除运算

除运算 设关系R除以关系S的结果为关系T&#xff0c;则T包含所有在R但不在S中的属性及其值&#xff0c;则T的原则与S的元组的所有组合都在R中。用象集来定义除法&#xff1a;给定关系R&#xff08;X&#xff0c;Y&#xff09;和S&#xff08;Y&#xff0c;Z&#xff09;。其中X&…

[图解tensorflow源码] 入门准备工作附常用的矩阵计算工具[转]

[图解tensorflow源码] 入门准备工作附常用的矩阵计算工具[转] Link: https://www.cnblogs.com/yao62995/p/5773142.html tensorflow使用了自动化构建工具bazel、脚本语言调用c或cpp的包裹工具swig、使用EIGEN作为矩阵处理工具、Nvidia-cuBLAS GPU加速计算库、结构化数据存储格式…

现共收到 5 个分组,其目的地址分别为: (1) 128.96.40.10 (2) 128.96.41.12 (3) 128.96.41.151 (4) 192.4.123.17 (5) 192.4.

计算目的地址的下一跳&#xff1a; 设某路由器建立了如表 1 所示路由表。现共收到 5 个分组&#xff0c;其目的地址分别为&#xff1a;(1) 128.96.40.10(2) 128.96.41.12(3) 128.96.41.151(4) 192.4.123.17(5) 192.4.123.90试分别计算下一跳解答&#xff1a; 用目的IP地址和路由…

【转】Docker学习_本地/容器文件互传(5)

1、查找所有容器 #docker ps a 2、找出我们想要的容器名字并查找容器长ID #docker inspect -f {{.ID}} python 3、拷贝本地文件到容器 docker cp 本地路径 容器长ID:容器路径docker cp /Users/xubowen/Desktop/auto-post-advance.py 38ef22f922704b32cf2650407e16b146bf61c221…

数据流图典型例题

数据流图典型例题 1.假设一家工厂的采购部每天需要一张订货报表&#xff0c;报表按零件编号排序&#xff0c;表中列出所有需要再次订货的零件。对于每个需要再次订货的零件应该列出下列数据&#xff1a;零件编号、零件名称、订货数量、目前价格、主要供应商、次要供应商。零件…

白盒测试的逻辑覆盖辨析(语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖)

白盒测试逻辑覆盖&#xff08;语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖&#xff09; 逻辑覆盖测试&#xff1a; 语句覆盖&#xff1a;每条语句至少执行一次判定覆盖&#xff1a;每一判定的每个分支至少执行一次条件覆盖&#xff1a;每一判定中的每个条件&…

03 CSS听课笔记

CSS&#xff1a;页面美化和布局控制 1. 概念&#xff1a; Cascading Style Sheets 层叠样式表层叠&#xff1a;多个样式可以作用在同一个html的元素上&#xff0c;同时生效 2. 好处&#xff1a;(1)功能强大(2)将内容展示和样式控制分离   * 降低耦合度。解耦   * 让分工协作…

安装MySQL时出现“服务没有响应控制功能。请键入 NET HELPMSG 2186 以获得更多的帮助。”的问题解决

安装MySQL时出现“服务没有响应控制功能”的问题解决第一步&#xff1a;设置环境变量第二步&#xff1a;初始化my.ini第三步&#xff1a;添加文件第一步&#xff1a;设置环境变量 安装MySQL时&#xff0c;运行“net start mysql”时出现“服务没有响应控制功能。请键入 NET HE…

时间序列模型——ARIMA模型实现预测

ARIMA模型和因子预测 文章目录ARIMA模型和因子预测一、ARIMA模型&#xff08;整个周期&#xff09;1.数据预处理2.展示时序图2.数据建模&#xff08;1&#xff09;差分d&#xff08;2&#xff09;p和q&#xff08;3&#xff09;选择模型&#xff08;4&#xff09;检验残差序列&…

线段树 离散化

题目一&#xff1a;E. Infinite Inversions 这个题目没什么思维量&#xff0c;还比较简单&#xff0c;就是离散化要加上每一个值的后面一个值&#xff0c;然后每一个值放进去的不是1 &#xff0c;而是这个值与下一个点的差值。 因为这个数代表了一堆数&#xff0c;然后每一次的…

时序模型——如何用Python进行时序模型预测的baseline预测(简单规则)

时序模型——如何用Python进行时序模型预测的baseline预测&#xff08;简单规则&#xff09; 在对时间序列问题进行建模预测之前&#xff0c;通常可以通过一些简单的规则对结果进行提前的预测&#xff0c;可以作为baseline&#xff0c;供之后的模型进行参考。很多数据分析的比…

简单关联规则算法例题-9个顾客的编号为(T1,T2,T3,T4,T5,T6,T7,T8,T9),每一个顾客购买的商品记录{{I1,I2,I5}...},并使用python实现简单关联规则

题目&#xff1a; 简单关联规则算法例题-9个顾客的编号为&#xff08;T1,T2,T3,T4,T5,T6,T7,T8,T9&#xff09;,每一个顾客购买的商品记录{{I1,I2,I5},{I2,I4},{I2,I3},{I1,I2,I4},{I1,I3},{I2,I3},{I1,I3},{I1,I2,I3,I5},{I1,I2,I3}}&#xff0c;求频繁项集&#xff1b;并用py…

ASP.NET AJAX (Atlas) 拖放(Drag Drop)功能6种实现方法总结

在Ajax程序中实现传统桌面程序中异常简单的拖放功能却并不是件容易的事情。然而Web上的拖放功能又如此的让人痴迷&#xff0c;所以几乎每个成熟的Ajax类库都提供了自己的一套实现拖放的封装&#xff0c;ASP.NET AJAX (Atlas) 自然也不例外。本文将总结并简要分析ASP.NET AJAX (…

python实现决策树-数据集如下图所示,根据我们对决策树的理解,设计一棵决策树,并输入{Age:36,Salary:H,STU:No,Credit:OK} 测试数据,是否与预期结果一致?

题目&#xff1a;数据集如下图所示&#xff0c;根据我们对决策树的理解&#xff0c;设计一棵决策树&#xff0c;并输入{Age:36,Salary:H,STU:No,Credit:OK} 测试数据&#xff0c;是否与预期结果一致&#xff1f;注意&#xff0c;不允许直接调用Sklearn提供的决策树方法 决策树算…