CCF-CSP真题202312-2【因子化简】(C++满分题解)

问题详情:

输入输出样例及解释:

代码思路喵:

  • 读取输入

    • 首先读取查询的个数 q,表示有多少次查询需要处理。
  • 处理每一个查询

    • 对于每个查询,读取两个数字 nk
      • n 是要进行质因数分解的数。
      • k 是阈值,用来决定是否保留某个质因子。
  • 质因数分解

    • 对于给定的 n,我们要找到所有的质因子,并计算每个质因子的指数(该质因子在 n 的分解中出现的次数)。
    • 遍历从 2sqrt(n) 的每个数 i,检查 i 是否为 n 的因子:
      • 如果 in 的因子,不断地将 n 除以 i,同时记录 i 的指数(coef)。
      • 如果 coef(指数)大于或等于阈值 k,那么就保留这个质因子,将 i^coef 乘入结果 res
  • 处理剩余的质因子

    • 在遍历完所有可能的因子后,如果 n 仍然大于 1,说明 n 本身是一个质数(剩余的 n 不可能被 2sqrt(n) 的任何数整除)。
    • 如果 k1(即任何质因子出现一次就保留),那么将这个质数 n 乘入结果 res
  • 输出结果

    • 对每个查询,计算出 n 简化后的值 res,并输出。
    • 如果所有质因子的指数都小于 k,则 res 保持为 1

详细代码:

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;

typedef long long LL;

int main(){
	int q;
	cin>>q;
	while(q--){
		LL n,res=1;
		int k;
		cin>>n>>k;
	for(int i=2;i<=n/i;i++){
		int co=0;
		while(n%i==0){
			n/=i;
			co++;//素因子出现的次数
		}
		if(co>=k){
			while(co--){
				res*=i;
			}
		}
	}
	if(n>1){
		if(k==1){
			res*=n;
		}
	}
	cout<<res<<endl;
	}
	return 0;
}

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值