2020.12.20 求质因数的方法

CF1444A Division

#include<bits/stdc++.h>
#define ll long long
#define fp(i,a,b) for(int i=a;i<=b;i++)
#define sfp(i,a,b) for(int i=a;i<b;i++)
const ll N = 1e6+10;
using namespace std; ll t;
ll p,q,cnt;
ll a[N],cnt1[N],cnt2[N];
void solve()
{
cin>>p>>q;
if(p%q!=0) cout<<p<<endl;
else
{
cnt=0;
ll b=sqrt(q);
ll P=p;
//求q的质因数用a[]存起来,用cnt1存含有的个数
fp(i,2,b)
{
if(q%i==0) a[++cnt]=i;
while(q%i==0)
{
cnt1[cnt]++;
q/=i;
}
}
if(q>1) //如果q本身就是质数
{
a[++cnt]=q;
cnt1[cnt]=1;
}
//OVER
fp(i,1,cnt)
{
while(p%a[i]==0)
{
cnt2[i]++;
p/=a[i];
}
}
ll ans=0;
fp(i,1,cnt)
{
ll c=cnt2[i]-cnt1[i]+1;
ll sum=1;
for(int j=1;j<=c;j++) sum*=a[i];
//sum=pow(a[i],c);
ans=max(ans,P/sum);
}
cout<<ans<<endl;
fp(i,1,cnt) cnt1[i]=0,cnt2[i]=0;
}
}
signed main() {
ios::sync_with_stdio(0), cin.tie(0);
cin>>t;
while(t--) solve();
}

求数的质因数打方法在代码里面(注释)

该题的思路是找当p%q==0时,也就是q为p一个因子时,p中其他因子,且不能被q整除的最大值。

先将q拆除质因数表示的形式 如12=223(两个2和一个3),由于q为p因数,故p也含有这些质因数,将相同质因数的个数相减+1去枚举求出最大的因子。

P = 12 = 2 * 2 * 3 , Q = 6 = 2 * 3 , p2 - q2 + 1 = 2 , 2 * 2=4 有点抽象

CF1444A Division 求质因数的方法的更多相关文章

  1. 2.C# 输入一个整数,求质因数

    C# 输入一个整数,求质因数 List<int> results = new List<int>(); int number = Int32.Parse(Console.Rea ...

  2. 【做题记录】CF1444A Division

    CF1444A Division 题意: 给定 \(t\) 组询问,每组给两个数 \(p_i\) 和 \(q_i\) ,找出最大的整数 \(x_i\) ,要求 \(p_i\) 可被 \(x_i\) 整 ...

  3. 水题挑战6: CF1444A DIvision

    A. Division time limit per test1 second memory limit per test512 megabytes inputstandard input outpu ...

  4. C# 输入一个整数,求质因数

    质数,质因数 应该都了解,在这里不过多解释,直接上代码: List<int> results = new List<int>(); int number = Int32.Par ...

  5. 题解【CF1444A Division】

    题面 t 组数据. 给定参数 p,q,求一个最大的 x,满足 \((x|p)∧(q∤x)\). \(1\le t \le 500\),\(1\le p \le10^{18}\),\(2\le q\le ...

  6. 集训第六周 数学概念与方法 J题 数论,质因数分解

    Description Tomorrow is contest day, Are you all ready? We have been training for 45 days, and all g ...

  7. HDU 6069

    Counting Divisors Problem Description In mathematics, the function d(n) denotes the number of diviso ...

  8. 经典算法问题的java实现 (一)

    原文链接: http://liuqing-2010-07.iteye.com/blog/1396859   1.如何计算闰年(Leap Year)?   四年一闰:百年不闰:四百年再闰.   具体参照 ...

  9. 快速求出n!的质因数的个数

    一般做组合数的题目都要进行质因数的分解,我们一般是for循环对每个数进行质因数分解,大多数情况都不会超时,但极少数的情况下,题目会不允许这样的做法,所以我们需要学会一种更快的方法来求质因数. 我们一般 ...

随机推荐

  1. Ingress-nginx工作原理和实践

    本文记录/分享 目前项目的 K8s 部署结构和请求追踪改造方案 这个图算是一个通用的前后端分离的 k8s 部署结构: Nginx Ingress 负责暴露服务(nginx前端静态资源服务), 根据十二 ...

  2. 使用C# (.NET Core) 实现观察者模式 (Observer Pattern) 并介绍 delegate 和 event

    观察者模式 这里面综合了几本书的资料. 需求 有这么个项目: 需求是这样的: 一个气象站, 有三个传感器(温度, 湿度, 气压), 有一个WeatherData对象, 它能从气象站获得这三个数据. 还 ...

  3. 【故障公告】阿里云 RDS SQL Server 数据库实例 CPU 100% 引发全站故障

    非常抱歉,今天 8:48 开始,我们使用的阿里云 RDS SQL Server 数据库实例突然出现 CPU 100%  问题,引发全站故障,由此给您带来麻烦,请您谅解. 发现故障后立即进行主备切换,和 ...

  4. java例题_34 用指正对三个数排序

    1 /*34 [程序 34 三个数排序] 2 题目:输入 3 个数 a,b,c,按大小顺序输出. 3 程序分析:利用指针方法. 4 */ 5 6 /*分析 7 * 指针方法的本质是按地址传值,将a,b ...

  5. Redis 超详细自动管理Cluster集群工具上手 redis-trib.rb (多图,手把手)

    安装介绍 ​ redis-trib.rb是一款由Redis官方提供的集群管理工具,能够大量减少集群搭建的时间. ​ 除此之外,还能够简化集群的检查.槽迁徙.负载均衡等常见的运维操作,但是使用前必须要安 ...

  6. DAOS 分布式异步对象存储|相关组件

    DAOS 的安装涉及多个组件,这些组件可以是集中式的,也可以是分布式的. DAOS 软件定义存储 (software-defined storage, SDS) 框架依赖于两种不同的通信通道: 用于带 ...

  7. 用优先队列构造Huffman Tree及判断是否为最优编码的应用

    前言 我们知道,要构造Huffman Tree,每次都要从堆中弹出最小的两个权重的节点,然后把这两个权重的值相加存放到新的节点中,同时让这两个节点分别成为新节点的左右儿子,再把新节点插入到堆中.假设节 ...

  8. 2048小游戏(c++)(转)

    下为源码 #include <iostream> #include <windows.h> #include <ctime> using namespace std ...

  9. 实际使用Elasticdump工具对Elasticsearch集群进行数据备份和数据还原

    文/朱季谦 目录 一.Elasticdump工具介绍 二.Elasticdump工具安装 三.Elasticdump工具使用 最近在开发当中做了一些涉及到Elasticsearch映射结构及数据导出导 ...

  10. [Fundamental of Power Electronics]-PART I-6.变换器电路-6.2 变换器简单罗列

    6.2 变换器简单罗列 变换器的数量可能有无穷种,因此将其全部列出是不可能的.这里给出了一个简单的罗列清单. 首先考虑含单个电感的单输入单输出变换器的类别.可以在电源和负载之间进行连接电感的方法数量是 ...