//约数

/*
求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. ElasticSearch入门介绍一

    ElasticSearch 关于es的几个概念: 集群:多个运行es节点可以组成一个集群,它们拥有相同的cluster.name. 节点:运行es的实例 索引:相当于数据库database,一个集群可 ...

  2. 20190408 XStream解析List

    XStream解析List 使用的JavaBean 普通JavaBean public class Book { private String name; public Book() { } publ ...

  3. 多目标遗传算法 ------ NSGA-II (部分源码解析)两个个体支配判断 dominance.c

    /* Domination checking routines */ # include <stdio.h> # include <stdlib.h> # include &l ...

  4. springboot整合activiMQ

    首先说明: 队列queue  的特点就是,许多人可以监听它,但是只有一个人能够收到消息. 主题topic    的特点就是,许多人监听它,都能收到消息. 需要安装activiMQ在自己的电脑上.启动方 ...

  5. scala面向对象.高阶函数,柯里化,Actor编程简介

    1.定义一个类 class Person{ //用val修饰的变量是只读属性,有getter但是没有setter val id ="111" //用var修饰的变量既有getter ...

  6. elasticsearch-head连接不上es

    修改elasticsearch.yml,增加如下字段 http.cors.enabled: true http.cors.allow-origin: "*" cros为: Cros ...

  7. bzoj千题计划299:bzoj1856: [Scoi2010]字符串

    http://www.lydsy.com/JudgeOnline/problem.php?id=1856 卡特兰数 从(1,1)走到(n,m),不能走y=x 上方的点,求方案数 从(1,1)走到(n, ...

  8. vue项目首次加载过慢

    vue项目优化 浅谈 Vue 项目优化 关于vue在app首次加载缓慢的解决办法 nginx开启缓存 在http部分加入 #要想开启nginx的缓存功能,需要添加此处的两行内容! #设置Web缓存区名 ...

  9. Shell结合Expect实现自动输入密码

    Shell结合Expect自动输入密码示例 #!/bin/bash cd /data/live /usr/bin/expect <<-EOF spawn git clone "s ...

  10. 关于Mac OS虚拟机下共享文件夹的方法

    1.确保左上角苹果标志的旁边是“Finder”: 2.点击"Finder": 3.选择“偏好设置设置”: 4.然后在“通用”标签下勾选“已连接服务器”: OK,搞定!   完成以上 ...