当前位置: 首页 > news >正文

2020智算之道复赛 D - 分数(素筛)

在这里插入图片描述
这题我背最大的锅,这种题目显然是考虑所有分母的 L C M LCM LCM,今年的校赛我还出过一道这样的题,然而比赛时我竟然是找规律凭第一感觉判断的,真的tcl

对于第 i i i个数,我们需要的只是考虑他的前缀所有分母的 L C M ( 1 , 2 , 3 , . . . , i − 1 ) LCM(1,2,3,...,i-1) LCM(1,2,3,...,i1),而 L C M LCM LCM的本质就是取同类质因子的 m a x max max,打表或者手写前几十个数,不难发现这样的规律:只有含单个质因子的数才会贡献一次答案,而贡献的就是它的唯一质因子。那么对于这样的数我们只需素筛,然后找每种质因子在最大范围所有的次幂数并打上标记,然后从前向后更新答案

赛后补题多写了一个 O ( n ) O(n) O(n)循环就 T L E TLE TLE了,多开一个数组就 M L E MLE MLE了,实际上我们只需要在欧拉筛的过程中计算答案

更让我没想到的是,比赛时一开始是直接对 1 L L < < 32 1LL<<32 1LL<<32取模,然后发现根据位运算的性质可以优化为 x & ( ( 1 L L < < 32 ) − 1 ) x\&((1LL<<32)-1) x&((1LL<<32)1),实际上 2 32 2^{32} 232不就是 u n s i g n e d    i n t unsigned~~int unsigned  int的最大范围吗,根据无符号整型数自然溢出的性质,直接计算即可,妙啊

#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define ins insert
#define Vector Point
#define lowbit(x) (x&(-x))
#define mkp(x,y) make_pair(x,y)
#define mem(a,x) memset(a,x,sizeof a);
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
typedef pair<int,int> pii;
typedef pair<double,double> pdd;
const double eps=1e-8;
const double pi=acos(-1.0);
const int inf=0x3f3f3f3f;
const double dinf=1e300;
const ll INF=1e18;
const ll Mod=(1LL<<32)-1;
const int maxn=8e7+10;
const int maxm=5e6+10;

int cnt,n;
int f[maxn],prime[maxm];
bool isprime[maxn];
unsigned int a,b;

void eular(int n){
    for(int i=2;i<=n;i++){
        if(!isprime[i]){
            prime[cnt++]=i;
            ll x=i;
            while(x<=n){
                f[x]=i;
                x=x*i;
            }
        }
        if(f[i]) a=a*f[i]+b;
        for(int j=0;j<cnt && i*prime[j]<=n;j++){
            isprime[i*prime[j]]=1;
            if (i%prime[j]==0) break;
        }
    }
}


int main(){
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    //ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    scanf("%d%u%u",&n,&a,&b);
    eular(n);
    printf("%u\n",a);
    return 0;
}

相关文章:

  • 无stencil buffer,绘制半透明planar shadow的一种方法
  • 2020牛客暑期多校第十场 A - Permutation(思维)
  • 2020牛客暑期多校第十场 E - Game(思维)
  • 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之30---基于BREW的PTT服务...
  • HDU - 6805 Deliver the Cake(拆点+最短路)
  • 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之31---LBS基于BREW的位置服务...
  • STL之multiset
  • Java网络编程从入门到精通(16):客户端套接字(Socket)的超时
  • 2020牛客暑期多校第十场 C - Decrement on the Tree(树的思维好题)
  • 页面校验用通用js
  • SPOJ - FIBOSUM Fibonacci Sum(递推公式/矩阵快速幂)
  • 保证唯一性只能靠建唯一索引
  • HDU - 6860 Fluctuation Limit(双向贪心/思维)
  • 付出就有回报,坚持才会胜利
  • 2020牛客暑期多校第九场 E - Groundhog Chasing Death(gcd+质因数分解)
  • 4个实用的微服务测试策略
  • android图片蒙层
  • Javascript基础之Array数组API
  • Python进阶细节
  • React的组件模式
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • SpiderData 2019年2月16日 DApp数据排行榜
  • uva 10370 Above Average
  • Yeoman_Bower_Grunt
  • 闭包--闭包之tab栏切换(四)
  • 翻译:Hystrix - How To Use
  • 服务器从安装到部署全过程(二)
  • 记录一下第一次使用npm
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 为视图添加丝滑的水波纹
  • 延迟脚本的方式
  • 用 Swift 编写面向协议的视图
  • postgresql行列转换函数
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #100天计划# 2013年9月29日
  • #162 (Div. 2)
  • (6)STL算法之转换
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (二)c52学习之旅-简单了解单片机
  • (四)鸿鹄云架构一服务注册中心
  • (转)甲方乙方——赵民谈找工作
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .gitattributes 文件
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .NET 使用 XPath 来读写 XML 文件
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • ;号自动换行