反素数 TIMUS 1748

题意:给出n,求1—n中因子最多的数的最小值,即反素数

思路:根据反素数分解质因数后,质因子越小,其对应指数越大的性质,直接DFS即可

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#define For(i,j,k) for(int i = j;i <= k;i ++)
using namespace std;

const int P[20] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59};
typedef long long LL;
LL cnt, num, n;

void AntiPrime(int k, LL now, LL ct, int Max_exp){
	if(ct > cnt) cnt = ct, num = now;
	if(ct == cnt && num > now) num = now;
	LL t = 1;
	For(i,1,Max_exp){
		t *= P[k];
		if(now <= n / t)
			AntiPrime(k + 1, now * t, ct * (i + 1), i);
	}
}

int main(){
	int T;
	scanf("%d", &T);
	while(T--){
		scanf("%lld", &n);
		cnt = 1, num = n;
		AntiPrime(0, 1, 1, 60);
		printf("%lld %lld\n", num, cnt);
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值