首页 > 其他分享 >878. 第 N 个神奇数字

878. 第 N 个神奇数字

时间:2022-11-22 19:12:46浏览次数:69  
标签:gcd 878 int mid long 整除 神奇 数字

878. 第 N 个神奇数字

题解:二分 + gcd

  1. 1~n中,能被a整除的个数 n/a , 能被b整除的个数 n/b, 能被a 且 b 整除的个数 n/ gcd(a,b) 则 1~n中能被a或b整除的个数为 n/a + n/b - n/gcd(a,b)
  2. 从1~n中二分,搜这个数k 1~k中 k/a + k/b - k/gcd(a,b) = n,也就是答案
  3. 因为n的范围1e9, a的范围4e4,所以最大的n为 4e13
class Solution {
    public int nthMagicalNumber(int n, int a, int b) {
        final int mod = (int) (1e9 + 7);
        long l = 1, r = (long) 4e13;
        while (l < r) {
            long mid = (l + r) / 2;
            if (get(mid, a, b) >= n) r = mid;
            else l = mid + 1;
        }
        return (int) (r % mod);
    }

    int gcd(int a, int b) {
        return b > 0 ? gcd(b, a % b) : a;
    }

    long get(long mid, int a, int b) {
        return mid / a + mid / b - mid / ((long) a * b / gcd(a, b));
    }
}

标签:gcd,878,int,mid,long,整除,神奇,数字
From: https://www.cnblogs.com/eiffelzero/p/16916143.html

相关文章

  • NOIP2015Day1T1-神奇的幻方
    1.神奇的幻方(magic.cpp/c/pas)【问题描述】幻方是一种很神奇的N∗N矩阵:它由数字1,2,3,……,N∗N构成,且每行、每列及两条对角线上的数字之和都相同。当N为奇数时......
  • 输入四个数字判断最大数和最小数
    这个问题很简单我们直接看代码有好几种解决方式但我的实力实在有限暂时只会这两种请看我博客的大神们见谅#include<stdio.h>intmain(){inta,b,c,d,max=0,min=0;//......
  • 数字化时代,学校VR实训教学解决方案开启VR教学新纪元
    近年来国家大力发展职业教育改革,教育部等十四部门研究制定了《职业院校全面开展职业培训促进就业创业行动计划》,计划中明确指出:职业院校要积极开发VR(虚拟现实技术)等数字化......
  • 广州华锐互动|构建智慧城市数字化三维实景建模平台
    在技术日新月异的时代,智慧城市建设发展也在不断推进,从物理世界到虚拟世界,人们对于未来城市的构想正在智慧城市中逐步实现。智慧城市的构建离不开物联网、人工智能、虚拟现......
  • 878. 第 N 个神奇数字
    第N个神奇数字一个正整数如果能被a或b整除,那么它是神奇的。给定三个整数n, a,b,返回第n个神奇的数字。因为答案可能很大,所以返回答案 对 109 +7取模......
  • 如何用App实现巡检业务数字化?以YonBuilder移动开发平台APICloud为例
    巡检是企事业单位的常见场景之一,以消防检查为例,秋冬季节气温下降、生产繁忙,用火、用电、用气情况大量增加,消防安全事件多发,一款消防检查app可以有效减少繁复工作、提升巡......
  • 数字先锋 | 随时随地云端阅片,“云胶片”时代来啦!
    作为现代医疗必不可少的诊断方法,医学影像数据在医疗数据中的占比高达90%且正以每年30%的速度递增,而影像医生就业人数年增长率仅4%。这意味着,全国总人数不到20万的放射科医生......
  • “元宇宙家园”国脉大厦展馆上线 天翼云实时云渲染筑基未来数字世界
    11月12日至13日,2022世界VR产业大会在南昌举办。在此期间,以“共建元宇宙生态,点亮新数智未来”为主题的中国电信生态论坛召开,中国电信天翼云携手新国脉数字文化股份有限公司(简......
  • 【华为OJ11】数字颠倒
    题目描述描述:输入一个整数,将这个整数以字符串的形式逆序输出程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001输入描述:输入一个int整数......
  • 【数组11】和为S的两个数字
    题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 输出描述:对应每个测试案例......