[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+…
Description 先解释一下SAPGAP=Super AntiPrime, Greatest AntiPrime(真不是网络流),于是你就应该知道本题是一个关于反质数(Antiprime)的问题.下面给出反质数的定义: 将一个正整数i的约数个数记为g(i),如g(1)=1,g(2)=2,g(6)=4. 如果对于一个正整数k,对于任意正整数i<k,均有g(k)>g(i),则k被称为反质数. 比如说1,2,4,6,12就是前5个反质数. 现在给定一个N,求N以内最大的反质数. 你一定会认为这…
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1053 题解: 可以证明,$1 \sim N$ 中最大的反质数,就是 $1 \sim N$ 中约数个数最多的数中,最小的那个. 证明:假设 $1 \sim N$ 中最大的反质数 $x$ 不是 $1 \sim N$ 中约数个数最多的,那么必然存在至少一个不等于 $x$ 的数字 $y$,它是 $1 \sim N$ 中约数个数最多的数中最小的,显然有 $g(y) > g(x)$. 那么,分类讨…
题面 引理1:  1~n中的最大反质数,就是1~n中约数个数最多的数中最小的一个(因为要严格保证g(x)>g(i)): 引理2:1~n中任何数的不同因子不会超过10个,因为他们的乘积大于2,000,000,000: 引理3:  1~n中任何数的质因子的指数总和不超过30: 引理4:  x的质因子是连续的若干个最小的质数,并且指数单调递减: 对于指数的排列我们只要深搜就可以找到方案,对于不同情况判断是否更新答案: #include <bits/stdc++.h> using namespa…
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等都是反质数. 做法:直接打表查找 #include <cstdio> #include <queue> #include <cstring> #include <iostream&…
题意: 反素数,膜一篇GOD's Blog...http://blog.csdn.net/ACdreamers/article/details/25049767 此文一出,无与争锋... CODE: 没有啦啦啦...…
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3085 题意:求n(<=10^100)之内最大的反素数. 思路: 优化2: int prime[]= { 1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101,103,107,109, 113,127,131,137,139, 14…
       初读这道题,一定有许多疑惑,其中最大的疑惑便是"反素数",反素数的概念很简单,就是,a<b同时a的因数个数大于b的因数个数.但是想要完成本题还需要一些信息,关于反素数的特点:反素数的质因子必定为从2开始的连续素数,若A=2的t1次方*3的t2次方*5的t3次方*7的t4次方-则t1>=t2>=t3>=t4-知道这些题做起来就简单多了.       但是我在这里不推荐此方法,因为用打表的方法更简单,不要被数据吓倒哟!        代码如下: #in…
思路:eng...按照题意搜就好了 (一定要注意题面的n<=10--) 枚举断点...反正n<=10不怂 //By SiriusRen #include <cstdio> #include <algorithm> using namespace std; int n,m,k; double ans=0x3fffffff,area; double dfs(double x,double y,int remain){ if(remain==1)return max(x/y,…
题面 奇数+奇数一定不是质数(1+1除外),偶数+偶数一定不是质数,质数只可能出现在偶数+奇数中 把所有的点排成两列,权值为奇数的点在左边,权值为偶数的在右边 如果左边的点x+右边的点y是质数,我们就连一条x->y的边 最后答案显然是最大独立集=n-最小点覆盖=n-最大匹配数 由于1比较特殊,考虑到最终答案1的出现次数<=1,所以如果有多个1只保留一个即可 #include <bits/stdc++.h> using namespace std; struct littlstar{…