2019summer系列 第六场

本文通过解析CodeForces1114C题目的解法,深入探讨了质因数分解的应用,并介绍了一种计算b=a1^k*a2^l*a3^m…an^?中b数量的方法。此外,还提到了CodeForces1114B题目的一种简单解决方案,即每m个最大值打印下标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://vjudge.net/contest/311332#overview

A CodeForces 1114C


zzy的神奇横跳真是太神奇啦!
btw,好好理解下质因数分解!!
b = a 1 k ∗ a 2 l ∗ a 3 m … … a n ? b = a1^k*a2^l*a3^m……an^? b=a1ka2la3man?
所以影响b的个数的,就只是k、m、l……?中,最小的啦!

//zzy666 
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,b,a[1000000],s[1000000],k[1000000];
int main(){
	scanf("%lld%lld",&n,&b);
	ll cnt = 0,tmp = b,ans = 1e18;
	//fen jie zhi yin shu
	for(ll i = 2; i<=sqrt(tmp); i ++){
		if (b%i == 0){
			a[++cnt] = i;//这样下标是从1开始的哦 
			while(b%i == 0){
				b /= i;
				k[cnt] ++;
			}
		}
	}
	//万一b是个大质数。。。 
	if (b != 1) a[++cnt] = b, k[cnt]++;
	// 
	for(int i = 1;i <= cnt;i ++){
		ll kk = 0,nn = n;
		while( nn != 0){ 
			nn /= a[i];//每次都多跳一倍 
			kk += nn;
		}
		ans = min(ans,kk/k[i]);//神奇操作 
	} 
	printf("%lld",ans);
    return 0;
}

C CodeForces 1114B


每m个最大值,就打印一下下标,就好了 !


本次真的挺水呢~
神奇的读题速度让自己第二次拿了个水题一血!
立下新的学习flag:区间dp。
// 话说自己真的不是很会写dp这种很重要的东西啊。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值