C. División (pensamiento + descomposición de factores primos)

https://codeforces.com/contest/1445/problem/C


Para mejorar sus habilidades de división, Oleg ideó tt pares de números enteros pipi y qiqi y para cada par decidió encontrar el mayor número entero xi, tal que:

  • pi es divisible por xi;
  • xi no es divisible por qi.

 

pi y qi (1≤pi≤1e18; 2≤qi≤1e9)


Idea: Desde la perspectiva de la descomposición de factores primos, puede encontrar que si dos números no son divisibles, es directamente pi.

Si pueden ser divisibles, entonces sus tipos de factores cualitativos son todos iguales. Es solo que los poderes de los factores primos son diferentes. Entonces solo necesitamos reducir una de las potencias de factor primo de pi a uno menos que la correspondiente potencia de factor primo de qi para satisfacer la no división. En cuanto a qué enumeración elegir.

(Debido a la complejidad del tiempo, la división constante se calcula como sqrt (n), lo que conduce a un tiempo largo -.-)

#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
#include<cmath>
#include<map>
#include<set>
#include<cstdio>
#include<algorithm>
#define debug(a) cout<<#a<<"="<<a<<endl;
using namespace std;
const int maxn=1e5;
typedef long long LL;
LL qpow(LL a,LL n)
{
	LL ans=1;
	while(n)
	{
		if(n&1) ans*=a;
		a*=a;
		n>>=1;
	}
	return ans;
}
int main(void)
{
  cin.tie(0);std::ios::sync_with_stdio(false);
  LL t;cin>>t;
  while(t--){
    LL p,q;cin>>p>>q;
    if(p%q!=0){
        cout<<p<<endl;
    }
    else{
    LL x=p;
    LL ans=0x3f3f3f3f3f3f3f3f;
	for(LL i=2;i*i<=q;i++)
	{
		if(q%i) continue;
		LL c1=0,c2=0;
		while(q%i==0)
		{
			c1++;
			q/=i;
		}
		while(p%i==0)
		{
			c2++;
			p/=i;
		}
		ans=min(ans,qpow(i,c2-c1+1));
	}
	if(q>1)
	{
		LL i=q;
		LL c1=0,c2=0;
		while(q%i==0)
		{
			c1++;
			q/=i;
		}
		while(p%i==0)
		{
			c2++;
			p/=i;
		}
		ans=min(ans,qpow(i,c2-c1+1));
        }
        cout<<x/ans<<endl;
    }

  }
return 0;
}

 

Supongo que te gusta

Origin blog.csdn.net/zstuyyyyccccbbbb/article/details/112981973
Recomendado
Clasificación