• 网志分类
  • » 查看所有日志 (49)
    » USACO (4)
    » 算法积累 (17)
    » 试题荟萃 (12)
    » 数学知识 (5)
    » 琐碎的感言 (11)
  • 最新评论
  • 站内搜索
  • 友情链接
  • » 我的歪酷 非非共享界
    » ZC 大牛.....
    » Wasltone
    » 赵一振 牛牛
    » Thunder
    » 巫山霏云

    订阅 RSS

    歪酷博客

    0019446

    Unbelievable @ 2006-08-09 21:02

    欧拉大人啊。。 真的太帅气了。。。
    这么华丽的欧拉函数 ~~~

    定义:小于自然数N并与N互质(除1以外无其它公因子)的自然数的个
    数用函数Ф(N)表示,称为欧拉函数

     N = p1^a1·p2^a2·p3^a3·……·pn^an
     Ф(N) = p1^(a1-1)(p1-1)*p2^(a2-1)(p2-1)*p3^(a3-1)·(p3-1)*……*pn^(an-1)(pn-1)

    noi2002 day2 robot 就是靠这个搞出来啊~
    这个题目还衍生出一个公式 更是牛b 的不行~
    [img]http://node1.foto.ycstatic.com/200608/09/f/22711567.jpg[/img]
    T 表示M 的所有因子的欧拉函数值之和

    还是不晓得T 后面的式子是怎么列出来的。。记住结论吧。。






     
    Unbelievable @ 2006-08-08 19:58

    刚刚清理邮箱, 受到ycul 发的mail
    才发觉好久没有更新blog 了啦..

    于是闲来无聊 就随便敲几个字啦.. 嘿嘿

    绝对不是敷衍了事哦...



     
    Unbelievable @ 2006-04-08 23:55

    古希腊数学家毕达哥拉斯在自然数研究中发现,220的所有真约数(即不是自身的约数)之和为:

    1+2+4+5+10+11+20+22+44+55+110=284。

    而284的所有真约数为1、2、4、71、 142,加起来恰好为220。人们对这样的数感到很惊奇,并称之为亲和数。一般地讲,如果两个数中任何一个数都是另一个数的真约数之和,则这两个数就是亲和数。

    220和284是人类最早发现,又是最小的一对亲和数。第二对亲和数(17296,18416)直到2000多年后的1636年才由法国数学家费马发现。1638年,法国数学家笛卡儿发现了第三对亲和数,而大数学家欧拉在1747年一下子给出了30对亲和数,1750年又增加到60对。到目前为止,人类已经发现了近千对亲和数。然而,令人惊奇的是,第二对最小的亲和数(1184,1210)竟然被数学家们遗漏了,直到1886年才由意大利的一位16岁男孩发现。

    亲和数还可以推广为若干个数组成的亲和数链,链中的每一个数的真约数之和恰好等于下一个数。如此连续,最后一个数的真约数之和等于第一个数。目前发现的最大的亲和数链由28个数构成,这个链的第一个数是14316。


     
    Unbelievable @ 2006-04-02 16:22

        如果是求 最小权, 把map中的值变成负数

    x, y : array [1..maxn] of boolean;
    lx, ly : array [1..maxn] of longint;
    map : array [1..maxn,1..maxn] of longint;

    procedure prepare;
    var i, j : longint;
    begin
      for i:=1 to n do
        for j:=1 to n do
          if map[i,j]>lx[i] then lx[i]:=map[i,j];
    end;

    function search(k : longint) : boolean;
    var i : longint;
    begin
      search:=true; x[k]:=true;
      for i:=1 to n do
        if not y[i] and (lx[k]+ly[i]=map[k,i]) then begin
          y[i]:=true; tmp:=match[i]; match[i]:=k;
          if (tmp=0) or search(tmp) then exit;
          match[i]:=tmp;
        end;
      search:=false; 
    end;

    procedure km;
    var i, j, k : longint;
    begin
      for k:=1 to n do
        repeat
          fillchar(x,sizeof(x),0);
          fillchar(y,sizeof(y),0);
          if search(k) then break;
          d:=maxlongint;
          for i:=1 to n do
            if x[i] then
              for j:=1 to n do
                if not y[j] then
                  if lx[i]+ly[j]-map[i,j]<d then d:=lx[i]+ly[j]-map[i,j];
          for i:=1 to n do begin
            if x[i] then dec(lx[i],d);
            if y[i] then inc(ly[i],d);
          end;
        until false;
    end;

    procedure getans;
    var ans, i : longint;
    begin
      ans:=0;
      for i:=1 to n do
        inc(ans,map[match[i],i]);
    end;



     
    Unbelievable @ 2006-01-20 14:41

    网络流 输出路径
    虽然可以在 change 段 保存 不过要注意处理反向边...所以还是很麻烦的... 所以还是求完流之后... 再递归求

    为此 偶 Sgu 185 wa 了n*n 遍啊... 估计这一辈子都忘不掉了....

    procedure out(k : smallint);
    var i : smallint;
    begin
      write(k,' ');
      for i:=1 to n do
        if f[k,i]>0 then begin
          out(i);
          dec(f[k,i]);  //这里减的是这条.. 路径上的流量(所有边中的最小流量)
          break;
        end;
    end;