【HDU1792】A New Change Problem
来源:互联网 发布:和珅 知乎 编辑:程序博客网 时间:2024/06/06 02:35
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1792
题意:给定A和B,A和B互质,求最大不能组合数,和不能组合数的个数。
基础知识:
Gcd(A, B) = 1 → Lcm(A, B) = AB
剩余类,把所有整数划分成m个等价类,每个等价类由相互同余的整数组成
任何数分成m个剩余类,分别为 mk,mk+1,mk+2,……,mk+(m-1)
分别记为{0(mod m)},{1(mod m)}……
而n的倍数肯定分布在这m个剩余类中
因为Gcd(m,n)=1,所以每个剩余类中都有一些数是n的倍数,并且是平均分配它的旁证,可见HDOJ 1222 Wolf and Rabbit
设 k_min = min{ k | nk ∈ {i (mod m)} }, i ∈ [0, m)
则 nk_min 是{i (mod m)}中n的最小倍数。特别的,nm ∈ {0 (mod m)}
nk_min 是个标志,它表明{i (mod m)}中nk_min 后面所有数,即nk_min + jm必定都能被组合出来
那也说明最大不能组合数必定小于nk_min
我们开始寻找max{ nk_min }
Lcm(m, n) = mn,所以很明显(m-1)n是最大的
因为(m-1)n是nk_min 中的最大值,所以在剩下的m-1个剩余类中,必定有比它小并且能被m和n组合,这些数就是(m-1)n -1,(m-1)n -2,……,(m-1)n -(m-1)
所以最大不能被组合数就是(m-1)n -m
如果m和n不互素,那{1 (mod m)}不能被m组合,同样也不能被n和m组合
我们能求出各个剩余类的nk_min之后,不能组合数的个数就是每个剩余类中小于各自nk_min的数的个数总和。
观察如下:
M = 5,N = 3
{0(mod 5)}:0,5,10,15……
{1(mod 5)}:1,6,11,16……
{2(mod 5)}:2,7,12,17……
{3(mod 5)}:3,8,13,18……
{4(mod 5)}:4,9,14,19……
加粗的就是不能组合数,可以看出在剩余类中它的数目有规律
Total = [0+1+2] + [0+1]
因为m和n互质,必有一个不完全周期
整理以后,可得公式 Total = (n-1)*(m-1)/2
转自:http://blog.sina.com.cn/s/blog_79b832820100riqp.html
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#define LL long longusing namespace std;int main(){ int a,b; while(~scanf("%d %d",&a,&b)){ printf("%d %d\n",a*b-a-b,(a-1)*(b-1)/2); } return 0;}
- 【HDU1792】A New Change Problem
- A New Change Problem
- A New Change Problem
- hdu 1792 A New Change Problem
- HDOJ 1792 A New Change Problem (数论)
- hdu 1792 A New Change Problem 剩余系
- hdu 1792 A New Change Problem(数论)
- hdu1792
- HDU 1792-A New Change Problem(互质数的最大不能表示数)
- HDU 2662 Coin && HDU 1792 A New Change Problem (互质数最大不能生成数)
- how to change official rom to support a new language
- Google China New Grad Test 2014 Round A Problem A
- Problem--379A--Codeforces--A. New Year Candles
- HDU1792(数论)
- After the new change
- This is a built-in profile,change the name to create a new profile(MyEclipse)
- Change-making problem
- Coin Change Problem
- python中str2float()的实现
- C++ 声明与定义的区别
- 个人掌握知识分享SEO(搜索引擎优化) robots文件优化
- GIT乱码出现解决记录
- STM32 GPIO——流水灯例程 学习总结
- 【HDU1792】A New Change Problem
- Could not find method compile() for arguments [project:'lib'] on root project ''
- hdu3342 Legal or Not【拓扑排序】
- spring配置中annotation-config与component-scan区别
- jstree 选中指定节点-yellowcong
- KETTLE在进行数据加工时 时间 与系统时间不一致
- tensorflow图片预处理和测试效果(resize,crop,pad等)
- jsp插入mysql中文乱码解决
- 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005