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

codeforces:E. Madoka and The Best University【因数list + 分析拆解 + 公因数特性 + 欧拉函数】

在这里插入图片描述

分析

在这里插入图片描述
显然先固定c,那么ab之和固定设为sum
gcd(a,b) = gcd(a, sum) = factor 【这个factor是sum的因数,我们先要来一个list存每个数的因数的】
特别地,化简以下,gcd(a // factor, sum // factor) = 1
我们要看有多少个这样的a满足gcd(a // factor, sum // factor) = 1
这里就要用到欧拉函数:
在这里插入图片描述

把sum // factor的质因数都找出来,套入公式即可
这样sigma求和就变成一个具体的数了
也就是说当c固定,gcd(a, b)固定时,我们找出有多少组即可

某马ac code

import sys

input = sys.stdin.readline
import functools
import math




def lcm(a, b):
    return int(a * b / math.gcd(a, b))


for _ in range(1):

    n = int(input())

    ## 从因子入手,获取每个数的因数
    factor = [] * n
    for i in range(n + 1):
        factor.append([])
    for i in range(1, n + 1):
        k = 1
        while k * i <= n:
            factor[k * i].append(i)
            k += 1

    ## pairs[i]和为i的两个数a, b
    ## 有多少个a和i互质
    ## 用到欧拉函数
    pairs = [0] * n
    pairs[2] = 1
    for i in range(3, n):
        nums = i
        for small in factor[i]:
            # 保证zhishu
            if len(factor[small]) == 2:
                nums *= (small - 1) / small
        pairs[i] = int(nums)


    ans = 0
    for i in range(1, n - 1):
        # 固定c为i,ab之和为sum
        sums = n - i
        # gcd(a, b) = gcd(a, sum)
        # 遍历sum的因子
        for factors in factor[sums]:
            if factors != sums:
                # 因子为factors的话
                # gcd(a, sum) = factors => gcd(a // factors, sum // factors) = 1
                # 那么这样的a的个数就是pairs[sums // factors]
                ans += lcm(i, factors) * pairs[sums // factors]

        ans %= 1000000007

    # 特判
    if n == 3:
        ans = 1
    print(ans)

总结

拆分问题,将变量转为ab
然后ab和固定的话,gcd(a, b) = gcd(a, sum) = one factor of sum
有多少组呢?
gcd(a // factor, sum // factor) = 1 使用欧拉函数即可
可以求出跟sum // factor互质的数的个数(公式就是去重的意思)

相关文章:

  • 华为OD 社招(Java后端)一面
  • DDD - 理论到落地从统一语言开始
  • 【LeetCode 48】旋转图像
  • 计算机网络.第五节课.笔记.以太网、CSMA/CD、VLAN
  • 运行时数据区域
  • 机器学习----k-means聚类
  • 姿态分析开源工具箱MMPose使用示例:人体姿势估计
  • 如何安装虚拟机
  • ICP问题 SVD方法推导(Markdown版)
  • java基于ssm+vue+elementui的水果生鲜销售购物商城
  • kafka知识点总结
  • 【vue3】06. 跟着官网学习vue3
  • 任务十一 BERT
  • MyBatis实现多层级collection嵌套查询
  • Containerd【轻量级容器管理工具】
  • android 一些 utils
  • Create React App 使用
  • ECMAScript6(0):ES6简明参考手册
  • FineReport中如何实现自动滚屏效果
  • JavaScript设计模式与开发实践系列之策略模式
  • js如何打印object对象
  • Redash本地开发环境搭建
  • vue总结
  • 对象管理器(defineProperty)学习笔记
  • 复习Javascript专题(四):js中的深浅拷贝
  • 诡异!React stopPropagation失灵
  • 目录与文件属性:编写ls
  • 设计模式 开闭原则
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 数据可视化之 Sankey 桑基图的实现
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • $.ajax,axios,fetch三种ajax请求的区别
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (2022 CVPR) Unbiased Teacher v2
  • (Git) gitignore基础使用
  • (八)c52学习之旅-中断实验
  • (笔试题)分解质因式
  • (二)PySpark3:SparkSQL编程
  • (已解决)什么是vue导航守卫
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)Google的Objective-C编码规范
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)visual stdio 书签功能介绍
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • ./configure,make,make install的作用
  • .form文件_SSM框架文件上传篇
  • .Net - 类的介绍
  • .NET DataGridView数据绑定说明
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .net开发时的诡异问题,button的onclick事件无效