题目连接:hdu 4910 Problem about GCD
题目大意:给定M,判断所有小于M并且和M互质的数的积取模M的值。
解题思路:有个数论的结论,若为偶数,M=M/2. 可以写成M=pk,即只有一种质因子时,答案为M-1,否则为1.特殊情况为4的倍数,不包括4.
首先用1e6以内的素数去试除,如果都不可以为p,那么对大于1e6的情况判断一下是否为素数,是素数也可以(k=1)...
分类:
其他好文 时间:
2014-08-04 02:05:06
阅读次数:
265
HDU 4910 Problem about GCD
题目链接
题意:给定一个数字,求出1 - n之间与他互质的数的乘积mod n
思路:看了网上别人找出来的规律,原文链接
然后由于这题的n很大,也没法直接判定,可以这样搞,先去试10^6以内的素数,判断可不可以,如果不行,再利用米勒拉宾判下是否是素数,如果不是的话,把这个数字开根在平方,判断是不是完全平方数,这样做的原因是数字...
分类:
其他好文 时间:
2014-08-04 02:03:46
阅读次数:
273
题目链接:uva 11256 - Repetitive
Multiple
题目大意:给定一个数n,要求找到最小的k,使得k?n为题目中定义的重复数字.
解题思路:枚举k?n的循环节长度,比如当前枚举为2,那么一次判断u=1001,1001001,1001001001
...,取d = gcd(n,u), 那么k = u / d, a = n / d (因为n?k=u?a)并且保...
分类:
其他好文 时间:
2014-08-03 12:54:35
阅读次数:
211
Least Common Multiplehttp://acm.hdu.edu.cn/showproblem.php?pid=1019 1 #include 2 int gcd(int a,int b){ 3 return b?gcd(b,a%b):a; 4 } 5 int lcm(int ...
分类:
其他好文 时间:
2014-08-03 12:27:35
阅读次数:
222
题目大意:
需要你构造一个b数组。使得b数组中的所有元素互质。
而且使得b数组与a数组中的每个对应下标元素的差值和最小。
思路分析:
考虑到 a中所有元素都是 0 - 30.
所以b中的元素也只可能在 0 - 59.
因为如果b 选择60的话,结果和1是一样的,而且b序列中 1 可以重复出现很多次。
因为gcd (1,x) = 1。。
所以们首先把2 - 59中的所有素数处...
分类:
其他好文 时间:
2014-08-03 10:19:05
阅读次数:
336
题目链接:uva 11317 - GCD+LCM
题目大意:给定n,求出1~n里面两两的最大公约的积GCD和最小公倍数的积LCM,在10100进制下的位数。
解题思路:在n的情况下,对于最大公约数为i的情况又phi[n/i]次。求LCM就用两两乘积除以GCD即可。
#include
#include
#include
#include
using namespace std...
分类:
其他好文 时间:
2014-08-03 01:48:04
阅读次数:
392
题目链接:uva 1521 - GCD Guessing Game
题目大意:给定一个数N,现在又一个数x,在1~N之间,现在每次可以猜一个数a,返回gcd(x,a),问说最少猜几次可以确定x。
解题思路:其实就将1~N里面的素数都要考虑一遍,因为有一个N的限制,所以每次选出来的素数的积不大于N即可。
#include
#include
#include
using name...
分类:
其他好文 时间:
2014-08-02 23:27:44
阅读次数:
302
题目链接:uva 10542 - Hyper-drive
题目大意:给定n维空间的线段,问说线段经过几个格子。
解题思路:对于线段可以将一点移动至原点,变成
(0,0)到(a,b)这条线段,以二维为例,每次会从一个格子移动到另一个格子,可以是x+1坐标,也可以是y+1,所以总的应该是a+b-1,扣除掉x+1,y+1的情况gcd(a,b)-1 (原点)。映射成n维就要用容斥原理计算结果...
分类:
其他好文 时间:
2014-08-02 23:26:24
阅读次数:
295
给定一个序列,两种操作
1:把一段变成x。
2:把一段每个数字,如果他大于x,就变成他和x的gcd,求变换完后,最后的序列。
线段树解法:用lazy标记下即可,优化方法还是很巧妙的,
Accepted
4902
515MS
3308K
1941 B
C++
#include "stdio.h"
#include "string...
分类:
其他好文 时间:
2014-08-02 20:57:24
阅读次数:
367
#include int gcd(int m,int n){if(n==0) return m;else return gcd(n,m%n);}*************变形一int gcd(int m,int n) {if(m%n==0) return m; else return gcd(n,m...
分类:
其他好文 时间:
2014-08-02 20:40:13
阅读次数:
243