CF1444A Division 求质因数的方法
2020.12.20 求质因数的方法
#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 求质因数的方法的更多相关文章
- 2.C# 输入一个整数,求质因数
C# 输入一个整数,求质因数 List<int> results = new List<int>(); int number = Int32.Parse(Console.Rea ...
- 【做题记录】CF1444A Division
CF1444A Division 题意: 给定 \(t\) 组询问,每组给两个数 \(p_i\) 和 \(q_i\) ,找出最大的整数 \(x_i\) ,要求 \(p_i\) 可被 \(x_i\) 整 ...
- 水题挑战6: CF1444A DIvision
A. Division time limit per test1 second memory limit per test512 megabytes inputstandard input outpu ...
- C# 输入一个整数,求质因数
质数,质因数 应该都了解,在这里不过多解释,直接上代码: List<int> results = new List<int>(); int number = Int32.Par ...
- 题解【CF1444A Division】
题面 t 组数据. 给定参数 p,q,求一个最大的 x,满足 \((x|p)∧(q∤x)\). \(1\le t \le 500\),\(1\le p \le10^{18}\),\(2\le q\le ...
- 集训第六周 数学概念与方法 J题 数论,质因数分解
Description Tomorrow is contest day, Are you all ready? We have been training for 45 days, and all g ...
- HDU 6069
Counting Divisors Problem Description In mathematics, the function d(n) denotes the number of diviso ...
- 经典算法问题的java实现 (一)
原文链接: http://liuqing-2010-07.iteye.com/blog/1396859 1.如何计算闰年(Leap Year)? 四年一闰:百年不闰:四百年再闰. 具体参照 ...
- 快速求出n!的质因数的个数
一般做组合数的题目都要进行质因数的分解,我们一般是for循环对每个数进行质因数分解,大多数情况都不会超时,但极少数的情况下,题目会不允许这样的做法,所以我们需要学会一种更快的方法来求质因数. 我们一般 ...
随机推荐
- 妙味课上利用splice进行数组去重为什么要 j--
var arr = [ 1,2,2,4,4,5,8,8,9,0,4,4 ]; for ( var i=0; i<arr.length; i++ ) { for ( var j=i+1; j< ...
- [倍增][换根DP]luogu P5024 保卫王国
题面 https://www.luogu.com.cn/problem/P5024 分析 可以对有限制的点对之间的链进行在倍增上的DP数组合并. 需要通过一次正向树形DP和一次换根DP得到g[0][i ...
- Django 模板 render传参不转码
今天通过Django后端向前端页面传递一行js代码,却发现符号被转码了导致代码不能执行 Django代码 HTML代码 实际生成页面代码 我们可以看到实际代码中的引号被转义,导致代码不能执行, 解决方 ...
- 网络对抗技术Exp2-后门原理与实践
后门概念 后门就是不经过正常认证流程而访问系统的通道. 哪里有后门呢? 编译器留后门 操作系统留后门 最常见的当然还是应用程序中留后门 还有就是潜伏于操作系统中或伪装为特定应用的专用后门程序. 下面是 ...
- CodeForces571A. Lengthening Sticks(组合数学-容斥)
题目大意: a,b,c三根木棍可以增加三个不同的数字,aa,bb,cc,且aa+bb+cc<=L,问能构成三角形的木棒有多少种方案 题目思路: 如果我们直接考虑把L分配给aa,bb,cc好像不好 ...
- (5)MySQL进阶篇SQL优化(优化数据库对象)
1.概述 在数据库设计过程中,用户可能会经常遇到这种问题:是否应该把所有表都按照第三范式来设计?表里面的字段到底改设置为多大长度合适?这些问题虽然很小,但是如果设计不当则可能会给将来的应用带来很多的性 ...
- SqlServer游标的创建与使用
前言 大家都对SqlServer视图.存储过程.触发器的创建与使用有一定的了解了,我们来看下什么是游标,怎么使用,什么时候用. SqlServer视图的创建与使用 SqlServer存储过程的创建与使 ...
- 高精度减法(c++)
高精度减法 每当要进行精度较高的运算时,就要用到高精度. 下图是各个类型的数值范围: 如果想不起各个类型占多少字节,可以采用下面的方法: printf("%d %d",sizeof ...
- C# WebView2 在你的应用中使用Chromium内核
什么是WebView2? Win10上对标Edge浏览器 Chromium内核 简单的可视为WebBrowser组件的升级版 如何使用WebView2? 官网下载 WebView2 RunTime V ...
- Ambassador-08-跨域
官方文档:https://www.getambassador.io/docs/latest/topics/using/cors/ Cross-Origin Resource Sharing-CORS ...