[bzoj]1053反质数<暴搜>
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1053
感想:这道题拿到以后还是想去知道一个数的约数个数要怎么求,去网上搜了公式,但是还是没有思路,最后看了好几个大佬的博客我才勉强知道这道题怎么做
其实我看见这数据范围我就下意识觉得搜索会爆,但是实际上这道题不会爆的
方法:首先约数的个数求法
已知数n=2^a + 3^b + 5^c + 7^d +……+ 第i个素数^x
约数个数=(a+1)*(b+1)*(c+1)*(d+1)*……*(x+1)
在知道这个公式后就可以用暴搜了,但是还是要知道就是数据范围内,素数最多就12个,所以预处理前几个素数
还是看代码吧,我在代码中加了一些注释
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#define maxn 2000000005
using namespace std; const int prime[]={,,,,,,,,,,,,,,,}; int n,m,ans,ans_tot; //设一个数n=2^a + 3^b + 5^c + 7^d +……+ prime[dep]^x;
//则这个数的约数个数为(a+1)*(b+1)*(c+1)*(d+1)*……*(x+1)
//这是约数个数计算公式 void fuck(int dep,long long now_val,int tot,int num)
{
//dep=当前是prime中的素数的下标
//now_val是当前的值
//tot指当前的约数的个数
//num是上一个素数(prime[dep-1])的幂
if(dep==)
{
if(now_val>ans&&tot>ans_tot){
ans=now_val;ans_tot=tot;
}//当发现比ans还大的数且这个数的约数个数比ans多
//即找到一个更优的解
if(now_val<=ans&&tot>=ans_tot)
{
ans=now_val;ans_tot=tot;
} //当发现一个比ans小但是约数比ans多的数
//说明ans不是一个反素数,也可以更新答案
return; }
int t=;
for(int i=;i<=num;i++)
{
fuck(dep+,now_val*t,tot*(i+),i);
//搜下一个素数,又i从0次方开始的,所以now_val*s,s=1;
//约数的公式可以知道这是tot*(i+1)
//到这个时候,prime[dep]已经i次方了,所以幂是i
//其实可以想到最优解是小素数的幂越大越优,所以加num限定
t*=prime[dep];//t表示当前素数prime[dep]的i次方
if(now_val*t>n)break;//当乘不下去了就跳出 } } int main()
{
scanf("%d",&n);
fuck(,,,);
printf("%d",ans);
}
以上皆为看了大佬博客后的理解,如有不对,请大佬们指出
[bzoj]1053反质数<暴搜>的更多相关文章
- bzoj:3085: 反质数加强版SAPGAP
Description 先解释一下SAPGAP=Super AntiPrime, Greatest AntiPrime(真不是网络流),于是你就应该知道本题是一个关于反质数(Antiprime)的问题 ...
- BZOJ 1053 - 反素数ant - [数论+DFS][HAOI2007]
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1053 题解: 可以证明,$1 \sim N$ 中最大的反质数,就是 $1 \sim N$ ...
- BZOJ 1053 反素数 题解
题面 引理1: 1~n中的最大反质数,就是1~n中约数个数最多的数中最小的一个(因为要严格保证g(x)>g(i)): 引理2:1~n中任何数的不同因子不会超过10个,因为他们的乘积大于2,00 ...
- HYSBZ 1053 反质数
input n 1<=n<=2000000000 output 不大于n的最大反质数 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正整数x满足:g( ...
- BZOJ 1053 & 反素数
题意: 反素数,膜一篇GOD's Blog...http://blog.csdn.net/ACdreamers/article/details/25049767 此文一出,无与争锋... CODE: ...
- BZOJ 3085: 反质数加强版SAPGAP (反素数搜索)
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3085 题意:求n(<=10^100)之内最大的反素数. 思路: 优化2: i ...
- BZOJ 1053 反素数ant
初读这道题,一定有许多疑惑,其中最大的疑惑便是"反素数",反素数的概念很简单,就是,a<b同时a的因数个数大于b的因数个数.但是想要完成本题还需要一些信息,关于 ...
- BZOJ 1024 SCOI2009 生日快乐 暴搜
思路:eng...按照题意搜就好了 (一定要注意题面的n<=10--) 枚举断点...反正n<=10不怂 //By SiriusRen #include <cstdio> #i ...
- BZOJ 4857 反质数序列
题面 奇数+奇数一定不是质数(1+1除外),偶数+偶数一定不是质数,质数只可能出现在偶数+奇数中 把所有的点排成两列,权值为奇数的点在左边,权值为偶数的在右边 如果左边的点x+右边的点y是质数,我们就 ...
随机推荐
- PHP时区转换(默认中国时区<Asia/Shanghai>转意大利时区<Europe/Rome>)
<?php function changeTimeZone($date_time, $format = 'Y-m-d H:i:s', $to = 'Europe/Rome', $from = ' ...
- 基于sklearn的metrics库的常用有监督模型评估指标学习
一.分类评估指标 准确率(最直白的指标)缺点:受采样影响极大,比如100个样本中有99个为正例,所以即使模型很无脑地预测全部样本为正例,依然有99%的正确率适用范围:二分类(准确率):二分类.多分类( ...
- LeetCode(239.滑动窗口的最大值
题目: 给定一个数组nums,有一个大小为k的滑动窗口从数组的最左侧移动到最右侧,你只可以看到滑动窗口内的k个数字.滑动窗口每次只向右移动一位. 返回滑动窗口中的最大值. 示例: 输入: nums = ...
- 一起了解 .Net Foundation 项目 No.20
.Net 基金会中包含有很多优秀的项目,今天就和笔者一起了解一下其中的一些优秀作品吧. 中文介绍 中文介绍内容翻译自英文介绍,主要采用意译.如与原文存在出入,请以原文为准. System.Drawin ...
- (转)const的内部链接属性(C++中适用)
转载自:http://xiangwangfeng.com/2011/05/02/const%E7%9A%84%E5%86%85%E9%83%A8%E9%93%BE%E6%8E%A5%E5%B1%9E% ...
- Qt5小Demo之猜数字游戏
玩法:设定时间进行猜数字,所猜数字为一个四位数,输入自己的数字,系统会提示是大了还是小了,依据条件逐步逼近正确结果.在规定时间里猜对即获胜,否则即失败. 平台支持:Win10下测试正常. 源码地址: ...
- vue-element-admin中是如何配置浏览器中的页面标题
因为在vue-element-admin中杈哥是写个一个动态路由标题,就是说你点进那个页面,它会显示对应页面的标题,所以我们仅仅在index页面进行修改是没有用的,那么我们改如何修改呢? 找到perm ...
- JavaSE知识概述集
一.HelloWord(文档启动Java) /* 使用命令行的方式执行的时候,cmd的默认编码格式是GBK 因此在输入中文的时候需要设置文件的编码格式位ANSI,不会出现乱码错误 注意: 0.先用ja ...
- Linux命令进阶篇-文件查看与查找
上一篇的博客对于Linux如何在不同目录下跳转和查看目录下内容做出了总结,主要靠cd和ls,很常见也很实用.但是你看到目录下面那么多不同花花绿绿的文件,心里是不是痒痒,是不是想进去一探究竟,有办法! ...
- 如何用 Blazor 实现 Ant Design 组件库
本文主要分享我创建 Ant Design of Blazor 项目的心路历程,已经文末有一个 Blazor 线上分享预告. Blazor WebAssembly 来了! Blazor 这个新推出的前端 ...