模板数学反质数
Posted xiaobuxie
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模板数学反质数相关的知识,希望对你有一定的参考价值。
题目链接:https://www.luogu.com.cn/problem/P1463
其实反质数就是要约数最大,在此前提下这个数最小。
然后它分解出来的质数一定是连续的,并且分解出来的质数的指数是单调递减的,所以可以dfs求。
参考:https://blog.csdn.net/qq_40942372/article/details/82016727
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 ll p[20] = { 0 , 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47}; 5 ll n,best,ans; 6 void dfs(int dep,ll now,ll num,int limit){ 7 if(dep >= 16) return; 8 if( now > n) return; 9 if( num > best ){ 10 best = num; 11 ans = now; 12 } 13 if( num == best && ans > now ) ans = now; 14 for(int i = 1;i<=limit;++i){ 15 now *= p[dep]; 16 if( now > n) return; 17 dfs( dep + 1,now,num*(i+1),i); 18 } 19 } 20 int main(){ 21 scanf("%lld",&n); 22 best = 0; 23 dfs(1,1,1,35); 24 printf("%lld",ans); 25 }
以上是关于模板数学反质数的主要内容,如果未能解决你的问题,请参考以下文章
Luogu P1463 [HAOI2007]反素数ant:数学 + dfs反素数