容斥或欧拉(hdu 5514)

STM32F103+LAN9252实战:从站代码迁移中的5个硬件坑与解决方案 本文分享了将EtherCAT从站代码从STM32F767迁移至STM32F103平台时,搭配LAN9252遇到的五个典型硬件问题及解决方案。核心挑战包括时钟源不匹配、FSMC时序配置、中断映射错误、片选资源不足以及Flash烧录异常。文章通过实战经验,强调了硬件差异对代码迁移的关键影响,并提供了具体的调试思路与配置方法。 阅读详情

传送门
题意:给定n个青蛙,每一个青蛙的步长是ai,可以无限次跳,总共有m块石头,编号从0~m-1,围成一个圆,刚开始所有的青蛙都在0号石头上,青蛙跳到的石头都被占据,问被占据的所有的石头的编号和时多少。
思路:假如a是一只青蛙的步长,则a*k是它可能走的所有情况(k为正整数),a*k%m的所有值就是这只青蛙你能跳到的所有石头,但是这样根本就求不出来,(a*k+b*m)%m的值和上面的值是相同的,假如(a*k+b*m)%m=c方程有解的条件就是gcd(a,m)|c,所以c的所有解就是k*gcd(a,m),就是说没一直青蛙占领的石头都是自己的步长a和m的最大公约数的整数倍,但是直接求是没发求的,因为m太大了,下面给出两种解法。

大佬博客

欧拉函数的解法

思路:设x=gcd(ai,m),g=gcd(i,m),(i代表的是0~m)。g肯定是m的所有因子,而x也是m的因子,所以g的集合里面包含x集合,而且g集合里面得到每一个不同的g的值,对应的刚好是1~m不会有重复的出现,当x|g时g集合中的所有值都能由x=gcd(ai,m)这只青蛙跳到,所以我们只要计算出有多少的g必定被跳到,将这么多g集合中的数字加起来就是答案了。这里有一个定理在 [1,x] 中与 x 互素的数的和为: phi(x)∗x2 ,所以一个g集合里的所有的和为 phi(mg)∗mg2∗g ,同一个g集合中的元素提出一个g,剩下的所有数肯定是小于
mg 且与其互素的所有数根据上面的定理得到每一个g集合的贡献。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#define LL long long
using namespace std;
const int maxn=1e6+10;
int vis[maxn],num[maxn],fac[maxn];
int get_eular(int n)//得到n的欧拉函数值
{
    int ans=n;
    for(int i=2; i*i<=n; i++)
    {
        if(n%i==0)
        {
            ans-=ans/i;
            while(n%i==0)
                n/=i;
        }
    }
    if(n>1) ans-=ans/n;
    return ans;
}
int main()
{
    int ncase;
    scanf("%d",&ncase);
    for(int ca=1; ca<=ncase; ca++)
    {
        memset(vis,0,sizeof(vis));
        int n,m,cont=0;
        scanf("%d%d",&n,&m);
        int tmp=sqrt(m);
        for(int i=1; i<=tmp; i++)//分解m的因子
        {
            if(m%i==0)
            {
                fac[cont++]=i;
                if(i*i!=m)
                    fac[cont++]=m/i;
            }
        }
        for(int i=0; i<n; i++)
        {
            int a;
            scanf("%d",&a);
            tmp=__gcd(a,m);
            for(int j=0; j<cont; j++)//找到所有tmp对应的g集合
            {
                if(fac[j]%tmp==0)//整除说明fac[j]所代表的g集合肯定能被跳到
                    vis[j]=1;
            }
        }
        LL ans=0;
        for(int i=0; i<cont; i++)
        {
            if(vis[i]&&fac[i]!=m)//注意是0~(m-1)
                ans+=1ll*get_eular(m/fac[i])*m/2;
        }
        printf("Case #%d: %lld\n",ca,ans);
    }
}

容斥解法

思路:答案是x=gcd(a,m),的所有倍数,但是如果直接算的话会有重复的,比如2和3,6会被重复计算两遍,这样就要用到容斥,但是m太大了,根本无法容斥。如果a和b都是m的因子则lcm(a,b)=x如果不大于m的话,x也是m的因子,而a的倍数和b的倍数重复的部分都是x的倍数,所以我们可以通过对m的因子进行容斥得到答案,vis[i]标记第i个因子需要被计算几次,而num[i]代表第i个因子已经被计算过几次了,因子从小到大枚举计算就好了。
x的倍数的计算是提出来个x就是等差数列最后一项是 mx−1 因为不能包括m一共有 mx−1 项,所以贡献值为 (mx−1+1)∗(mx−1)2∗x = m∗(mx−1)2

#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#define LL long long
using namespace std;
const int maxn=1e6+10;
int vis[maxn],num[maxn],fac[maxn];
int main()
{
    int ncase;
    scanf("%d",&ncase);
    for(int ca=1; ca<=ncase; ca++)
    {
        memset(vis,0,sizeof(vis));
        memset(num,0,sizeof(num));
        int n,m,cont=0;
        scanf("%d%d",&n,&m);
        int tmp=sqrt(m);
        for(int i=1; i<=tmp; i++)//计算m的因子
        {
            if(m%i==0)
            {
                fac[cont++]=i;
                if(i*i!=m)
                    fac[cont++]=m/i;
            }
        }
        sort(fac,fac+cont);//排序 从小到大枚举
        cont--;//不能计算m因为是从0~(m-1)的
        for(int i=0; i<n; i++)
        {
            int a;
            scanf("%d",&a);
            tmp=__gcd(a,m);
            for(int j=0; j<cont; j++)//统计那些因子应该被计算
            {
                if(fac[j]%tmp==0)
                    vis[j]=1;
            }
        }
        LL ans=0;
        for(int i=0; i<cont; i++)
        {
            if(vis[i]!=num[i])//到目前为止第i个因子的计算次数不符合要求
            {
                LL he=1ll*m/fac[i];
                ans+=m*(he-1)/2*(vis[i]-num[i]);//容斥计算
                tmp=vis[i]-num[i];
                for(int j=i+1; j<cont; j++)//更新fac[i]的倍数被计算的次数
                    if(fac[j]%fac[i]==0)
                    num[j]+=tmp;
            }
        }
        printf("Case #%d: %lld\n",ca,ans);
    }
}
AI大模型API中转站选型指南:12项关键指标与实战评估 随着AI大模型技术的快速迭代,企业面临着一个核心挑战:如何在基础模型频繁更新的背景下,为业务系统选择稳定可靠的API中转服务?本文基于真实生产环境测试数据,从12个关键维度系统评估主流API中转站平台,帮助技术团队在模型快速演进的生态中做出科学选型决策。 1. API中转站的核心价值与业务场景 1.1 什么是API中转站 API中转站(API Gateway/Aggregator)是连接业务系统与多个大模型厂商的中间层服务。它通过统一的接口封装了不同厂商的API协议差异,为企业提供标准化的模型调用能力。在实 阅读详情

相关推荐

从零到一:STM32 CubeMX与WS2812B的DMA驱动艺术

本文详细介绍了如何使用STM32 CubeMX和DMA技术驱动WS2812B RGB LED灯条,从硬件设计到软件实现的全过程。通过CubeMX配置定时器和DMA,实现高效的PWM波形生成与数据传输,解决传统GPIO控制资源占用高的问题。文章还提供了颜色编码、动画效果实现及常见问题解决方案,助力开发者快速掌握智能LED控制技术。

weixin_28278377的博客 977

hdu5514 容斥或数论

传送门 题意:一排编号0-m-1的石头围成一个圈,有编号1-n的青蛙每次可以跳a[i]步,问可以跳到的石头的编号和是多少 思路:由于石头是个圈,不难发现每个青蛙最少可以跳的步数差为gcd(a[i],m),也就是说一个每次跳a[i]步的青蛙能跳到gcd(a[i],m)的及其倍数的编号的石头上,我们不难想到用容斥...用枚举子集做了半天,也wa了半天...枚举子集会爆long long,所以不可取

竹丙丙丙丙 308

模拟电子课设-半导体直流稳压电源的设计和测试

1、学习直流稳压电源的设计方法; 2、研究直流稳压电源的设计方案; 3、掌握直流稳压电路的调试及主要指标的测试方法。二、设计要求和技术指标 1、设计要求1)、设计一个能输出5V-12V连续可调的直流稳压电源,或±12V的直流稳压电源; 2)、根据设计要求和技术指标设计好电路,选好元件及参数,要求绘出原理图,并用Protel 99SE/DXP画出印制板图; 3)、在万能板或面包板上制作一台直流稳压电源; 4)、测量直流稳压电源的稳压系数; 5)、测量直流稳压电源的内阻; 6)、拟定测试方案和设计步

GJZGRB的博客 1970

Hdu 5514 类莫比乌斯函数 容斥原理

题意:有m个石子围成一圈, 有n只青蛙从跳石子, 都从0号石子开始, 每次越过a[i]个石子 问所有被至少踩过的石子的序号之和思路: 设所有踩到的石头下标集合为 P,题目求sum(P),青蛙集合为a 总共m个石子,青蛙每次跳ai。等价于m个石子,青蛙每次跳gcd(m,ai)。并且 当 gcd(m,ai)|k 时,第k个石头可以背踩到。 先对青蛙集合a做一个等价替代,ai = gcd(m,a

QZQ 2025

YOLOv5 改进点总览:轻量化、高精度的背后有哪些魔改?

YOLOv5是由Ultralytics团队开发的高效目标检测模型,其核心改进包括:主干网络采用CSPDarknet53提升梯度传播效率;特征融合使用PANet增强小目标识别;输出结构采用解耦头设计优化定位和分类任务。此外,YOLOv5通过CIoU损失函数、Mosaic数据增强和SimOTA标签分配机制进一步提升性能。模型支持多种推理格式(ONNX/TensorRT等),并具备自动锚框匹配和多尺度训练功能,使其在轻量化(yolov5s仅7MB)与高性能(最高51.2% mAP)间取得平衡,但缺乏正式论文支撑是

guoguozgw的博客 1804

告别SendKeys!用DD驱动级模拟在Windows 10/11上实现真·后台键鼠操作(Python实战)

本文详细介绍了如何使用DD驱动级模拟技术在Windows 10/11上实现真后台键鼠操作,解决传统方法如pyautogui和SendKeys的局限性。通过Python实战案例,展示了驱动级模拟在游戏自动化、RPA等场景中的高效应用,包括环境配置、核心API解析及高级优化技巧。

weixin_42519985的博客 798

HDU 5514(容斥+dp)

题意 M个石头围成圈(0-indexed),有N个青蛙,青蛙开始都在0处,每只青蛙可以每次跳,可以跳无限次,求至少被一个青蛙覆盖的石头id和 题解 对于每只青蛙,易知其跳过的石头为加法群中元素 即先处理得到 单个贡献为,即之和 通过容斥可以得到 问题转变为求容斥系数 对于表示加入n个数对于M的因子d,正负系数(0/1)为多少 可以发现没加入一个, 容斥系数变化为继承、正负互换...

Hardict的算法日记 307

非sudo用户如何安全使用Docker:Rootless模式实战指南

Docker Rootless模式是一种基于Linux用户命名空间(userns)的容器运行时安全机制,它通过UID/GID映射、fuse-overlayfs文件系统和slirp4netns网络栈,在不提升权限的前提下实现容器隔离。其核心原理是将容器内root身份映射为宿主机非特权用户,从而规避docker组等价root的安全风险。相比传统root模式,Rootless在权限控制、逃逸防护和多租户隔离方面具备天然优势,适用于CI/CD流水线、Kubernetes边缘节点及受限生产环境。本文聚焦无sudo权限

weixin_30274627的博客 348

HDU-5514-Frog(容斥)

Sample Input 3 2 12 9 10 3 60 22 33 66 9 96 81 40 48 32 64 16 96 42 72 Sample Output Case #1: 42 Case #2: 1170 Case #3: 1872 题意: 有n只青蛙,m个石头(0,m-1)围成圆圈。第i只青蛙每次只能条ai个

不会吃鱼的喵 443

XXL-Job 分布式定时任务

XXL-JOB是一款轻量级分布式定时任务调度框架,采用调度中心与执行器分离架构,解决单机任务宕机、重复执行等问题。核心模块包括调度中心(管理任务配置、触发调度)和执行器(执行任务逻辑),支持集群部署保证高可用。框架提供丰富的任务触发规则、路由策略、阻塞策略及完善的运维能力,适用于多种业务场景如数据同步、定时推送等。安装时需准备MySQL数据库并初始化表结构,通过Docker部署调度中心服务。相比其他定时框架,XXL-JOB具有轻量化、可视化等优势,是中小企业的首选方案。

郭宝的博客 695

Arduino、ESP32驱动AS3935数字闪电传感器(闪电传感器)

闪电传感器采用AMS独具创新的AS3935数字闪电传感芯片与Coilcraft的MA5532-AE专用天线,可在室内或室外,安全地检测方圆40km范围内发生闪电的距离,闪电相对强度与统计闪电发生次数。

不脱发的程序猿 2008

hdu 5514 (欧拉函数的应用)

这个大佬写得很好 http://blog.youkuaiyun.com/qingshui23/article/details/73091006#include <bits/stdc++.h> using namespace std; typedef long long ll; int euler(int n)//求n的欧拉函数 { int i; int eu = n;//欧拉函数

黑码 655

ESP32设备驱动-直流电机与L298N电机驱动器

在本文中,我们将介绍如何使用ESP32通过L298N电机驱动器驱动直流电机。

视觉与物联智能 3593

HDU-5514、Frogs (容斥)

题目链接 题面: 题意: 有一个长度为 mmm 的环,编号为 [0,m−1][0,m-1][0,m−1],有 nnn 只青蛙在 000 号点处,第 iii 只青蛙每次可以从 kkk 号点跳到 k+a[i]k+a[i]k+a[i] 号点,现在这 nnn 只青蛙可以跳跃无穷次,问最后哪些点被青蛙曾经跳进去过。 题解: 很明显,第 iii 只青蛙只会跳 gcd(a[i],m)gcd(a[i],m)gcd(a[i],m) 那些点,我们令 a[i]=gcd(a[i],m)a[i]=gcd(a[i],m)a[i]=g

_Griefs 318

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Frogs HDU - 5514

Frogs HDU - 5514 题意: 有n个青蛙,第 i 个青蛙每次只能够跳 ai​步,现在有m个石头围成一圈,编号为0到m−1,现在青蛙可以围着这个石头组成的圆跳无限次,每跳一次就会占领这个石头,可以无限占领,现在问你的是这n个青蛙占领的石头的编号的总和是多少。 题解: 参考博客 肯定和容斥有关,但本人很无擅长容斥,所以不会。。。 第一个方法(欧拉函数): 对于第i个青蛙,他所能跳的步长为gi=gcd(m,ai),也就是所有编号为gi的倍数的石头,他都能占领 现在有多个青蛙,就会存在一些位置被重复占领

qq_35975367的博客 436

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

hdu 5514 Frogs 2015沈阳区域赛 数论 欧拉 好题 开心的题

2015沈阳区域赛,现场A的题,银牌题。

ned_chu的博客 2146

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

HDU 5514.Frogs-欧拉函数 or 容斥原理

Frogs Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 4904Accepted Submission(s): 1631 Problem Description There aremstones lying on a ...

weixin_30468137的博客 129

欧拉函数(或者容斥)-HDU5514

题目题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5514题目来源:2015沈阳区域赛,现场A的题,银牌题。简要题意:n个青蛙在m长的环上从0开始无限跳,每只跳ai远,求所有会被青蛙跳到的格子下标之和。数据范围:T⩽20;1⩽n⩽104;1⩽m⩽109;ai⩽109 开心的题显然很容易看出格子是否被跳和gcd(ai,m)有关。对于任意一个gcd(ai

karant的博客 287

ACM-ICPC 2015 沈阳赛区现场赛 F. Frogs && HDU 5514(容斥)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5514 题意:有m个石子围成一圈, 有n只青蛙从跳石子, 都从0号石子开始, 每只能越过xi个石子。问所有被至少踩过一次的石子的序号之和。 题解:根据裴蜀定理每个青蛙可以跳到的最小石子编号为 gcd(xi,m) = bi,所有小于 m 的 bi 的倍数都是可以到达的石头。显然所有 bi 都为 m ...

weixin_30670925的博客 185

HDU - 5514 Frogs 欧拉函数||容斥定理

题目链接 题意:有 n 个青蛙,第 i 个青蛙每次只能够跳 ai 步,现在有 m 个石头围成一圈,编号为 0 到 m−1,现在青蛙可以围着这个石头组成的圆跳无限次,每跳一次就会占领这个石头,可以无限占领,现在问你的是这 n 个青蛙占领的石头的编号的总和是多少。思路: 先说第一种方法: 我们可以发现对于每个ai,他所能经过的石头为 k*gcd(m,ai).但是我们发现比如第一个样例 2 1

Marcus-Bao的个人主页 661

hdu 5514 Frogs 容斥或欧拉函数

题目链接 题意 输入n,m,n代表青蛙个数 m代表石头个数 石头围成一圈 由0编号到m-1 第二行输入n只青蛙的步长,一块石头不能被两只青蛙同时占领,求石头编号的和,以第一组样例 2 12 9 10 为例 2 即两只青蛙 12是石头个数  两只青蛙最开始都在编号为0的石头上 第一只青蛙 可以跳到  编号9  (9+9)%12 编号6   (18+9)%12 编号3   (27+9)

yangdelu855的博客 293

HDU-5514-Frogs

ACM模版描述题解可以用容斥解,也可以用欧拉函数解,推到过程真心强大。Ps. 图片来源 ITAK’s blog。大佬的博客中也有这个题的容斥解法,很强很强很强。代码#include <iostream> #include <cstdio> #include <algorithm>using namespace std;typedef long long ll;const ll MAXN = 1e4

逐梦者 622

hdu 3501 欧拉函数

hdu 3501 题意:求小于n的所有不与n互素的数的和。 思路:本来想着这个题可以和hdu 5514一样用容斥搞,但是tle了。。 对于一个小于n的正整数i,如果i与n互素,那么n-i也是与n互素;如果i不与n互素,那么n-i也一定不与n互素。这个很容易证明。 所以我们很容易可以发现对于n(n>2)来说,与它互素的数都是成对存在的,并且存在ϕ(n)/2\phi(n)/2对组合和是n,这样就

AngelBeats! 573

另类容斥和欧拉函数巧妙应用(HDU--5514)

There are mm stones lying on a circle, and nn frogs are jumping over them.  The stones are numbered from 00 to m−1m−1 and the frogs are numbered from 11 to nn. The ii-th frog can jump over exactly aia...

xiaoyizhan139的博客 245

HDU - 5514 - Frogs 【完美使用欧拉函数 -> 也可容斥】

Frogs Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 2713 Accepted Submission(s): 885 Problem Description There are m stones lying on...

nobleman 1176

关于数论的一点整理(看心情更新)

一、欧拉函数的求法 欧拉函数表示一个数的简化剩余系的元素数。 对于一个数p,它的欧拉函数值即为[1,p)内与p互质的数的个数 1、O(√n)求φ(n) int zch(int x) { int ret=x; for(int i=2;i*i<=x;i++){ if(x%i==0) ret-=ret/i; while(x%i==0) x/=i; } if(x>1) ret-=ret/x; return ret; } 2、O(n)求φ(1)~φ(n) const int maxn=

蒲公英殇的博客 275
上一篇: 母函数
下一篇: 最小点覆盖,最小边覆盖,最大匹配,最小路径覆盖,最大独立集总结。
acmer_zp
博客等级 码龄11年 18粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值