//约数

/*
求n的正约数集合:试除法
复杂度:O(sqrt(n))
原理:扫描[1,sqrt(N)],尝试d能否整除n,若能,则N/d也能
*/
int factor[],m=;
for(int i=;i*i<=n;i++){
if(n%i==){
factor[++m]=i;
if(i!=n/i) factor[++m]=n/i;
}
} /*
求[1,n]每个数的正约数集合:倍数法
复杂度:O(nlogn)
原理:对于每个数d,[1,n]中以d为约数的数就是d的倍数
*/
vector<int> factor[];
for(int i=;i<=n;i++)
for(int j=;i*j<=n;j++)
factor[i*j].push_back(i); /*两个推论
1.一个整数的约数个数上界 为2*sqrt(n)
2.[1,n]每个数的约数个数总和大约为nlogn
*/
/*
题意有点绕
每个人手里有一个非0数字,首先第k个人出列,然后按其手里的数字让下一个人出列
循环如此,设i为小于等于N的最大反素数,问第i个出列的人的编号
打表求反素数:按质因数大小递增顺序搜索每一个质因子,枚举每一个质因子的个数
唯一分解定理,一个数的因子数:(p1+1)(p2+1)(p3+1)...
性质1:一个反素数的质因子必然是从2开始连续的质数
性质2:
1 2 3 4 6 9 12 18 36
*/
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define ll long long
#define inf 1<<29
int n,p[]={,,,,,,,,,,,},use[];
ll maxt,ans;//maxt是最大因子数,ans是当前的反质数
//id是素数表的下标,now是当前数字,tot是因子数,符合因子数公式
void dfs(ll id,ll now,ll tot){
if(tot>maxt)//找到了因子数更大的数
ans=now,maxt=tot;
else if(tot==maxt && now<ans)//找到因子数相同,但是数值更小的数
ans=now,maxt=tot;
use[id]=;
while(now*p[id]<=n && use[id]+<=use[id-]){//第二个是剪枝
use[id]++;
now*=p[id];
dfs(id+,now,tot*(use[id]+));
}
}
int main(){
scanf("%d",&n);
use[]=inf;
dfs(,,);
printf("%lld",ans);
return ;
}

推公式题,详见进阶指南p134

思路大概是:当i在区间[x,k/(k/x)]时,k/i的值都是一样的,那么这一段的值可以用等差数列求和公式做

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
long long n,k;
long long ans;
int main(){
scanf("%lld%lld",&n,&k);
ans=(long long)n*k;
for(int x=,gx=;x<=n;x=gx+){
gx=k/x?min(n,k/(k/x)):n;
ans-=(k/x)*(x+gx)*(gx-x+)/;//首项x*k/x,末项gx*k/x,项数gx-x+1
}
printf("%lld\n",ans);
}

约数 求反素数bzoj1053 bzoj1257的更多相关文章

  1. 51nod1060:最复杂的数(DFS求反素数)

    把一个数的约数个数定义为该数的复杂程度,给出一个n,求1-n中复杂程度最高的那个数.   例如:12的约数为:1 2 3 4 6 12,共6个数,所以12的复杂程度是6.如果有多个数复杂度相等,输出最 ...

  2. 【BZOJ1053】[HAOI2007]反素数

    [BZOJ1053][HAOI2007]反素数 题面 bzoj 洛谷 题解 可以从反素数的定义看出小于等于\(x\)的最大反素数一定是约数个数最多且最小的那个 可以枚举所有的质因数来求反素数,但还是跑 ...

  3. zoj 1562 反素数 附上个人对反素数性质的证明

    反素数的定义:对于不论什么正整数,其约数个数记为.比如,假设某个正整数满足:对随意的正整 数.都有,那么称为反素数. 从反素数的定义中能够看出两个性质: (1)一个反素数的全部质因子必定是从2開始的连 ...

  4. 【bzoj1053】反素数

    [bzoj1053]反素数 题意 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例 ...

  5. BZOJ1053 [HAOI2007]反素数ant 数论

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 传送门 - BZOJ1053 题目描述 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正 ...

  6. 【BZOJ1053】 反素数ant

    BZOJ1053 反素数ant 我们先考虑唯一分解定理求出约数个数: \(x=a_1^{p_1}a_2^{p_2}a_3^{p_3}...a_k^{p_k}\) 然后\(num=\Pi_{i=1}^k ...

  7. 【BZOJ1053】[HAOI2007]反素数ant 暴力

    [BZOJ1053][HAOI2007]反素数ant Description 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正整数x满足:g(x)>g(i) ...

  8. bzoj1053: [HAOI2007]反素数ant

    51nod有一道类似的题...我至今仍然不会写暴搜!!! #include<cstdio> #include<cstring> #include<iostream> ...

  9. BZOJ1053:反素数(数学)

    题目链接 对于任意的正整数\(x\),记其约数的个数为\(g(x)\).现在定义反素数:对于\(0<i<x\),都有\(g(x)>g(i)\),那么就称x为反素数. 现在给定一个数N ...

随机推荐

  1. 重新打开Eclipse出现“An internal error has occurred. java.lang.NullPointerException”

    如果出现了上述的错误按照如下的3个步骤解决:1.首先关闭MyEclipse工作空间.2.然后删除工作空间下的. “/.metadata/.plugins/org.eclipse.core.runtim ...

  2. Django xadmin引入DjangoUeditor

    Django xadmin引入DjangoUeditor 版本:python3.6.1,Django1.11.1 DjangoUeditor下载地址:https://github.com/twz915 ...

  3. C#修饰符详解

    不定期更新,2017.8.9 一.new 别看new这个修饰符经常用,恐怕很多人都不知道其本质.我们先来看看new修饰符的官方定义: new 仅允许在嵌套类声明中使用,表明类中隐藏了由基类中继承而来的 ...

  4. 10、JPA-二级缓存

    pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...

  5. java抽象类与接口回顾

    1.抽象类中可以包括成员变量,方法,构造器,初始化块,内部类(接口/枚举)五种成分.2.让A类中包含B方法,又不提供B方法的实现,即抽象方法只有方法签名,没有方法体.3.有抽象方法的类只能被定义成抽象 ...

  6. MySql Workbench导出ER图并存为PDF文件

    一.登陆数据库 二.点击Database  => Reverse Engineer 三.填入登陆信息后next => next,选择要生成ER模型的数据库 四.点击next => n ...

  7. dp题

    1.luogu 1484种树 50分思路:dp,但是数据规模过大没法dp选择奇怪贪心 dp方程 到i坑种j树 dp[i][j]=max(dp[i-1][j],dp[i-2][j-1]) 100分思路: ...

  8. C++函数返回局部变量

    函数不能返回指向栈内存的指针 原因:返回值是拷贝值,局部变量的作用域为函数内部,函数执行结束,栈上的局部变量会销毁,内存释放. 可返回的局部变量: 1. 返回局部变量本身 int sum(int a, ...

  9. Linux - rar 压缩

    Linux - rar yum -y install libstdc++.so. wget http://rarsoft.com/rar/rarlinux-4.0.1.tar.gz cd rar ma ...

  10. POJ1258 Agri-Net【最小生成树】

    题意: 有n个农场,已知这n个农场都互相相通,有一定的距离,现在每个农场需要装光纤,问怎么安装光纤能将所有农场都连通起来,并且要使光纤距离最小,输出安装光纤的总距离. 思路: 又是一个最小生成树,因为 ...