注:下面的解法中都没有考虑超大数,就是无法直接表示的数。如果有的话需要自己定义超大数,并定义相应的操作。#include //辗转相除法 缺点求余操作用到除法 非常耗时int gcd1(int x, int y){ return (!y) ? x : gcd1(y, x % y); //不需要...
分类:
其他好文 时间:
2014-10-31 15:02:15
阅读次数:
186
斐波那契级数除以N会出现循环,此周期称为皮萨诺周期。下面给出证明必然会出现循环这是基于下面事实:1.R(n+2)=F(n+2)modP=(F(n+1)+F(n))modP=(F(n+1)modp+F(n)modp)modp2.斐波那契数列的最大公约数定理:gcd(F(m),F(n))=F(gcd(m...
分类:
其他好文 时间:
2014-10-28 17:35:56
阅读次数:
538
题目大意如下:给定一个序列,每个序列有值xi,现给定t个数列,对于每个长n的数列,求一段[l,r]使 [r-l+1]*gcd(l,r)最大,gcd(l,r)指的是该连续区间的最大公约数。不难想到n^3,n^2logx,n^2的暴力吧n^3DP,n^2logx暴力枚举,n^2DP可以这样考虑,每次我对...
分类:
其他好文 时间:
2014-10-28 17:29:56
阅读次数:
179
对于一对数(p,q),若它们的gcd为x0,lcm为y0,则:p*q/x0=y0,即q=x0*y0/p,由于p、q是正整数,所以p、q都必须是x0*y0的约数。所以O(sqrt(x0*y0))地枚举约数,依次用gcd判断。 1 #include 2 #include 3 using namespac...
分类:
其他好文 时间:
2014-10-26 18:12:47
阅读次数:
231
gcd.scalaobject gcd{ def main(args:Array[String]){ println( gcd1(args(0).toInt,args(1).toInt)) println( gcd2(args(0).toInt,args(1).toInt)) } ...
分类:
其他好文 时间:
2014-10-23 19:00:44
阅读次数:
121
题目:给你一组数,求出其中两两最大公约数中最大的值。
分析:数论。数据较小,直接枚举即可。
说明:注意输入格式。
#include
#include
#include
using namespace std;
int data[101];
int gcd(int a, int b)
{
return a%b?gcd(b, a%b):b;
}
int main()
{
int...
分类:
其他好文 时间:
2014-10-23 16:24:39
阅读次数:
348
今天在做一个很简单的算法题目,“求最大公约数和最小公倍数”。一看,太tm容易。 思考过程是这样的:1.最大公约数,有两个个极端,一个是最大公约数是1,一个最大公约数是两个数之间较小的那个数。2.我就理所当然地认为,so easy。不就一个for循环吗?从较小的那个数到1的这一段范围就,如果其中...
分类:
编程语言 时间:
2014-10-22 21:46:30
阅读次数:
194
The process that a procedure generates is of course dependent on the rules used by the interpreter. As an example, consider the iterative gcd procedur...
分类:
编程语言 时间:
2014-10-22 20:02:02
阅读次数:
283
http://acm.hdu.edu.cn/showproblem.php?pid=4902
出n个数,然后对这n个数进行两种操作:
如果是 1 l r x,则把 [l, r] 区间里面的每一个数都变为x;
如果是 2 l r x,则 比较 [l, r]区间里的数a_i和x的大小,如果a_i > x,把a_i变为a_i和x的最大公约数。
最后输出这n个数最终的值。
线段树可搞...
分类:
其他好文 时间:
2014-10-21 21:43:19
阅读次数:
290
求两数最大公约数时使用的方法。求m,n两数字最大公约数。算法较简单#include<iostream>
usingnamespacestd;
intmain()
{
intm,n,r;
while(cin>>m>>n)
{
r=m%n;
while(r!=0)
{
m=n;
n=r;
r=m%n;
}
cout<<n<<endl;
}
}
分类:
其他好文 时间:
2014-10-20 19:40:40
阅读次数:
181