欧拉

【POJ3696】The Luckiest Number-欧拉定理+快速幂

青春壹個敷衍的年華 提交于 2019-11-26 03:22:49
测试地址: The Luckiest Number 题目大意: 给出一个正整数 L ( ≤ 2 , 000 , 000 , 000 ) //--> ,要使正整数 888...8        K 位 //--> 能整除 L //--> ,求最小的 K //--> ,如果不存在这样的 K //--> 则输出0。 做法: 这题的思路很神……没看题解的时候根本不知道怎么做,调也调了好一会,我好弱啊…… 这一题需要使用欧拉定理+快速幂来解决。 我们发现 999...9        K 位 //--> 可以表示为 10 K − 1 //--> ,所以 888...8        K 位 //--> 可以表示为 8 / 9 × ( 10 K − 1 ) //--> ,那么存在一个整数 p //--> 使得 8 / 9 × ( 10 K − 1 ) = L × p //--> ,所以 10 K − 1 = 9 / 8 × L × p //--> 。由于等式右边要是整数,那么 p //--> 应该满足 8 | ( L × p ) //--> 。因为 L //--> 已经包含 gcd ( L , 8 ) //--> 这些因子,所以 p //--> 需要包含 8 / gcd ( L , 8 ) //--> 这些因子,所以可以将 p //--> 写成

欧拉回路之套圈法

醉酒当歌 提交于 2019-11-25 21:05:47
简介 欧拉回路就是给一个图,存在一条回路把所边经过且每条边只经过一次。 存在欧拉回路的条件 对于无向图 : 存在欧拉回路的条件:每个点的度都为偶数; 存在欧拉路的条件:有且只有两个点的度为一,且这两个点分别为起点和终点; 对于有向图 : 存在欧拉回路的条件:每个点出度等于入度; 存在欧拉路的条件:存在一个点出度比入度多一作为起点,存在一点入度比出度多一作为终点,其余点出度等于入度; 套圈法 判断是否存在欧拉回路很好判断,那怎么求欧拉回路呢? 我们采用套圈法,dfs回溯的时候才把边倒着记录。为什么要这样呢? 假如我们随便走,有一条边加一条边,最后回到起始点,会形成一个环。但是我们不能保证没有其他环还没遍历到! 下面拿个图演示一波: 红色为起始点,蓝色为有向边,随便走的话我们可能走完左边的圈就不走了,右边的圈还没走。 而套圈法则是,如果我们遇到分叉点就都走一走,这样能保证每条边都走过,最后倒着加边即可。 注意每条边只走一次,每次走完一条边我们要标记走过,这样就能保证复杂度。 复杂度嘛,每条边只走一次,复杂度是 O ( n + m ) O(n+m) O ( n + m ) 。 下面以洛谷P1127 词链(这是链接) 一题作为例题。 代码如下 #include <cstdio> #include <cstring> #include <algorithm> #include