ZOJ- 2562 反素数使用
借用了下东北师大ACM的反素数模版。
本来我是在刷线段树的,有一题碰到了反素数,所以学了一下。。有反素数的存在,使得一个x ,使得x的约数个数,在1 到 x的所有数里面,是最大的。
这里面还涉及安叔那天讲的求一个数的约数个数,用其素数因子的指数相乘即可。
这是东北师大的模版:
typedef __int64 INT;
INT bestNum; //约数最多的数
INT bestSum; //约数最多的数的约数个数
const int M=; //反素数的个数
INT n=;//求n以内的所有的反素数
INT rprim[M][];
//2*3*5*7*11*13*17>n,所以只需考虑到17即可
INT prim[]={,,,,,,,,,}; //当前走到num这个数,接着用第k个素数,num的约数个数为sum,
//第k个素数的个数上限为limit
void getNum(INT num,INT k,INT sum,INT limit) {
if(num>n)return;
if(sum>bestSum){
bestSum = sum;
bestNum = num;
}else if(sum == bestSum && num < bestNum){ //约数个数一样时,取小数
bestNum = num;
}
if(k>=) return; //只需考虑到素数17,即prim[6] for(INT i=,p=;i<=limit;i++){ //素数k取i个
p*=prim[k];
if(p>n||p*num>n) return; //这里也要判断一下,否则老是爆掉。
getNum(num*p,k+,sum*(i+),i);
}
} INT log2(INT n){ //求大于等于log2(n)的最小整数
INT i = ;
INT p = ;
while(p<n){
p*=;
i++;
}
return i;
} int getrprim(){//反素数的个数
int i = ;
while(n>){
bestNum = ;
bestSum = ;
getNum(,,,log2(n));
n = bestNum - ;
rprim[i][]=bestNum;
rprim[i][]=bestSum;
i++;
}
return i;
}
ZOJ 2562的代码
#include <iostream>
#include <cstdio>
typedef long long ll;
using namespace std;
ll prime[]={,,,,,,,,,,,,,,,};
ll antinum;
ll antisum;
ll antiprime[][];
ll maxn;
ll log2(ll n)
{
ll i=,p=;
while (p<n)
{
p*=;
i++;
}
return i;
}
void getanti(ll num,ll sum,ll k,ll limit)
{ if (num > maxn) return;
//cout<<num<<endl;
if (sum>antisum) {antisum=sum;antinum=num;}
else
if (sum==antisum&&num<antinum) antinum=num;
if (k>) return;
for (ll i=,p=;i<=limit;i++)
{
p*=prime[k];
if (p>maxn||num*p>maxn) return;
getanti(num*p,sum*(i+),k+,i);
}
}
void getnum()
{
antinum=;
antisum=;
//cout<<maxn<<endl;
getanti(,,,); }
int main()
{
//printf("%I64d\n",maxn);
// ll cur=getnum();
ll t;
//cout<<cur<<endl;
// for (int i=cur-1;i>=0;i--)
//cout<<antiprime[i][0]<<endl;
while (scanf("%lld",&t)!=EOF)
{
maxn=t;
getnum();
printf("%lld\n",antinum);
}
return ;
}
ZOJ- 2562 反素数使用的更多相关文章
- zoj 2562 反素数
题目大意:求n范围内最大的反素数(反素数定义:f(x)表示x的因子数,f(x)>f(x1) (0<x1<x)) x用质因数形式为:x=a1^p1*a2^p2......an^pn(a ...
- zoj 1562 反素数 附上个人对反素数性质的证明
反素数的定义:对于不论什么正整数,其约数个数记为.比如,假设某个正整数满足:对随意的正整 数.都有,那么称为反素数. 从反素数的定义中能够看出两个性质: (1)一个反素数的全部质因子必定是从2開始的连 ...
- ZOJ 2562 HDU 4228 反素数
反素数: 对于不论什么正整数x,起约数的个数记做g(x).比如g(1)=1,g(6)=4. 假设某个正整数x满足:对于随意i(0<i<x),都有g(i)<g(x),则称x为反素数. ...
- ZOJ 2562 More Divisors(高合成数)
ZOJ 2562 More Divisors(高合成数) ACM 题目地址:ZOJ 2562 More Divisors 题意: 求小于n的最大的高合成数,高合成数指一类整数,不论什么比它小的自然数 ...
- poj 2886 线段树的更新+反素数
Who Gets the Most Candies? Time Limit: 5000 MS Memory Limit: 0 KB 64-bit integer IO format: %I64d , ...
- 【POJ2886】Who Gets the Most Candies?-线段树+反素数
Time Limit: 5000MS Memory Limit: 131072K Case Time Limit: 2000MS Description N children are sitting ...
- Prime & 反素数plus
题意: 求因数个数为n的最小正整数k. n<=10^9输出其唯一分解形式 SOL: 模拟题,一眼看过去有点惊讶...这不是我刚看过的反素数吗... 咦数据怎么这么大,恩搞个高精吧... 于是T了 ...
- BZOJ 1053 & 反素数
题意: 反素数,膜一篇GOD's Blog...http://blog.csdn.net/ACdreamers/article/details/25049767 此文一出,无与争锋... CODE: ...
- Who Gets the Most Candies?(线段树 + 反素数 )
Who Gets the Most Candies? Time Limit:5000MS Memory Limit:131072KB 64bit IO Format:%I64d &am ...
随机推荐
- NPOI读取excel 空行
if (sheet.GetRow(i) != null) 每行判断一下,避免出错.真是蛋疼.
- http https 干货
HTTPS原理 在谈HTTPS原理之前,首先了解一下Http和Https的区别. Http(全称:Hyper Text Transfer Protocol),一般称为超文本传输协议,也是互联 ...
- leetcode1261 Find Elements in a Contaminated Binary Tree
""" Given a binary tree with the following rules: root.val == 0 If treeNode.val == x ...
- ACM-吴奶奶买鱼
题目描述:吴奶奶买鱼 吴奶奶有个可爱的外孙女——琪琪,她很喜欢小动物,尤其喜欢养鱼.为了让小孙女养到漂亮的小鱼,吴奶奶一大早就到花鸟鱼虫市场买鱼.这个市场可真大,里面有各种各样的宠物,就连宠物鱼都 ...
- CentOS7安装Jenkins与配置
安装 将Jenkins存储库添加到yum repos,并从此安装Jenkins. sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenki ...
- 058-PHP中goto语句的使用
<?php for($i=1;$i<=5;$i++){ //使用for循环循环输出1~5 if($i==3) goto ECH; //当$i为3时候跳出for循环 echo "$ ...
- mysql union 和union all
http://www.w3school.com.cn/sql/sql_union.asp
- php观察者模式。
第一次写博客,大家多多关照!欢迎拍砖哦! 我也刚学设计模式,所以记录下来. <?php class person{ public $name; public $birthday; public ...
- OIer常见问题与错误总结
作为一名OIer,无论是一名刚入门的蒟蒻,还是叱诧风云的神犇,相信都会难免去犯一些错误(废话不犯错误岂不是都满分了(ノへ ̄.).在这里总结了一些OIer常见易犯的错误,与大家共勉. 1.正常错误 可能 ...
- s曲线
一. 原型 sigmoid 函数原型: 在 [-5, 5] 上的曲线是这个样子的: 二.X轴变形 如果我们希望加速更快一点,那么就需要对原型中的指数 -X 的系数进行改变.原型可以认为是 -(1 * ...