【模板】【数学】反质数

题目链接: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 }

原文地址:https://www.cnblogs.com/xiaobuxie/p/12243369.html

时间: 2024-07-29 23:29:00

【模板】【数学】反质数的相关文章

反质数

问题描述 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4. 如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例如,整数1,2,4,6等都是反质数. 现在给定一个数N,你能求出不超过N的最大的反质数么? 分析 这道试题的数学性质很强,关键点在于“一个数与其约数”的关系.在设计算法之前,我们不妨先对“一个数与其约数”进行一番简单的分析. 先举个简单的例子,求一个数756的约数总个数. 大家都知道先将756分解质因子,得到756=22×33×7

CNUOJ 0486 800401反质数

难度级别:A: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 将正整数 x 的约数个数表示为 g(x).例如,g(1)=1,g(4)=3, g(6)=4. 如果对于任意正整数y,当 0 < y < x 时,x 都满足 g(x) > g(y), 则称 x 为反质数.整数 1,2,4,6 等都是反质数. 现在任意给定两个正整数 M, N,其中,M < N <= 20000000,按从小到大输出其中(包括 M 和 N)的所有

BZOJ1053 [HAOI2007]反素数 &amp; BZOJ3085 反质数加强版SAPGAP

BZOJ 1053 Description 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正整数x满足:g(x)>g(i) 0<i<x ,则称x为反质数.例如,整数1,2,4,6等都是反质数.现在给定一个数N,你能求出不超过N的最大的反质数么 ? Input 一个数N(1<=N<=2,000,000,000). Output 不超过N的最大的反质数. Sample Input 1000 Sample Output 840 题解 可以发现,

反质数问题,求不大于n的最大反质数

反质数:设f(n)表示n个约数的个数,如果对于任意x有0<x<n, f(x) < f(n),那么n就是一个反质数 我们都知道对于任意一个数n,都可以用质数乘积的形式表示出来:x = p1^k1+p2^k2...pn^kn 一个数n如果可以表示成 n = p1^k1 + p2^k2, 那么它的约数的个数就是 (k1+1)*(k2+1) ::k1个p1,可以产生k1个约数,分别是p1^1, p1^2...p1^k1, 同理k2个p2 那么这k1个约数与k2个约数分别相乘,又会得到k1*k2个

HYSBZ 1053 反质数

input n 1<=n<=2000000000 output 不大于n的最大反质数 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例如,整数1,2,4,6等都是反质数. 做法:直接打表查找 1 #include <cstdio> 2 #include <queue> 3 #include <cstring> 4 #include <i

COJ 0486 800401反质数

800401反质数 难度级别:A: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 将正整数 x 的约数个数表示为 g(x).例如,g(1)=1,g(4)=3, g(6)=4. 如果对于任意正整数y,当 0 < y < x 时,x 都满足 g(x) > g(y), 则称 x 为反质数.整数 1,2,4,6 等都是反质数. 现在任意给定两个正整数 M, N,其中,M < N <= 20000000,按从小到大输出其中(包括

模板—数学—矩阵树定理

模板—数学—矩阵树定理 Code: #include <cstdio> #include <algorithm> using namespace std; #define N 1010 #define mod 1000000000 long long ans,squ[N][N];int n,m; long long calc(int n) { long long tmp=1; for(int i=1;i<n;i++) { int j; for(j=i;j<n;j++)

模板—数学—Lucas

模板—数学—Lucas Code: #include <cstdio> #include <algorithm> using namespace std; #define N 100010 int n,m,p,inv[N],powq[N]; int lucas(int n,int m) { if(n<m) return 0; if(n<=p&&m<=p) return 1ll*powq[n]*inv[m]%p*inv[n-m]%p; return

ES6中的模板字符串---反引号``

在react中,反引号``有特殊的含义. 如MDN中所述,模板字符串(Template literals)允许嵌入表达式,并且支持多行字符串和字符串插补特性.基本语法为以下几种: 其中第一行为最基本用法,即使用反引号 ('`') 来代替普通字符串中的用双引号和单引号. 第二行为多行字符串用法,即反引号中文本可以直接接受换行而不必使用\n换行符来强制换行. 第三行则为模板字符串的最核心用法,即反引号中的${expression}占位符中expression可以为任意的JavaScript表达式,甚