欧几里德算法及扩展

今天老师跟我们讲算法于程序设计了

嗯嗯  说到算法 就是有很多话说了 算法是计算机的基石、灵魂,李开复曾经写过一篇算法的力量

伟大的高德纳没错就是发明Tex的伟大科学家,写了 The Art of Computer Programming这又一经典的书籍

看得我们是仰望膜拜不已。现在 我终于又再一次回归到算法的源头来了 。是的源头。

大一曾经学习过算法,不过那不是学习,仅仅是在学习打字而已,把代码敲到电脑上去,然后debug,就这么简单,没有人告诉怎么样学习算法。现在 大多快忘光光了把 什么二叉树 快速选择 谁还会记得

没办法 现在只有捡起来了。继续算法研究,额,惭愧。。。

定理:gcd(a,b) = gcd(b,a mod b)

证明:a可以表示成a = kb + r,则r = a mod b
假设d是a,b的一个公约数,则有
d|a, d|b,而r = a – kb,因此d|r
因此d是(b,a mod b)的公约数

假设d 是(b,a mod b)的公约数,则
d | b , d |r ,但是a = kb +r
因此d也是(a,b)的公约数

因此(a,b)和(b,a mod b)的公约数是一样的,其最大公约数也必然相等,得证

欧几里德算法

根据这个原理来做的,其算法用C++语言描述为:

[cce]
void swap(int & a, int & b){//交换数字大小
    int c = a;
    a = b;
    b = c;
} 

int gcd(int a,int b){//取公约数
    if(0 == a ){//a不等于0
        return b;
    } 

    if( 0 == b){//b不等于0
        return a;
    } 

    if(a > b){//交换a,b的值
        swap(a,b);
    } 

    int c;
    for(c = a % b ; c > 0 ; c = a % b){//for循环 初始条件c=a取b的模  结束条件 c=0
        a = b;
        b = c;
    } 

    return b;
}
[/cce]

用Java实现代码:

[cce]
package algorithm;
/**
 *<p>hibernate-tutorialDescription:欧几里德算法</p>
 *@version1.0.0
 *@CopyrightCopyright(c)2008
 */
public class MaxFeed{
    public int getnum(int m,int n){//获取两个数字
 int r=getleave(m,n);//这个是什么?
        while(r!=0){
            int[] s=swapnum(m,n,r);
            m=s[0];
            n=s[1];
            r=getleave(m,n);
        }
        return n;
    }
    /**
     *@paramm
     *@paramn
     *@return
     */
    private int getleave(int m,int n){//求余函数
        int r=m%n;
        return r;
    }
    /**
     *<p>comments:交换
     *          </p>
     *@paramm
     *@paramn
     *@paramr
     *@return
     */
    private int[] swapnum(int m,int n,int r){//什么意思
        m=n;
        n=r;
        int[] s=newint[2];
        s[0]=m;
        s[1]=n;
        return s;
    }
    /**
     *<p>comments:测试用例
     *          </p>
     *@paramargs
     */
    public static void main(String[] args){//主函数
        MaxFeed maxFeed=new MaxFeed();//实例化 嘿嘿
        int r=maxFeed.getnum(96,27);
        System.out.println("***********************************\n\n\n");
        System.out.println("                 "+r);
        System.out.println("***********************************");
    }
}
求n个整数的最大公约数,扩展:
#include <stdio.h>

void main()
{  int k,n;
 long a,b,c,r,m[100];
 printf("请输入整数个数n:");//输入原始数据
 scanf("%d",&n);
 printf("请依次输入%d个整数:",n);

 for(k=0;k<=n-1;k++)//循环输入正整数
 { printf("\n请输入第%d个整数: ",k+1);
 scanf("%ld",&m[k]);}

 b=m[0];
 for(k=1;k<=n-1;k++)//利用n-1次欧几里德算法
 {  a=m[k];
 if(a<b) {c=a;a=b;b=c;}//交换a  b
 r=a%b;
 while(r!=0)//判断终止条件
 { a=b;b=r;r=a%b;}
 }

 printf("%ld",m[0]);
 for(k=1;k<=n-1;k++)//输出结果
 printf(",%ld",m[k]);
 printf("的最大公约数是%ld",n);
}
[/cce]

网站被黑了

昨天在上传文件的时候突然发现服务器竟然多了一个从未见过的aspx文件夹

作为职业人士,专业的敏感的直觉告诉我有问题

果然,打开一看,竟然是最新的.net2.0的马儿,还好貌似没有拿下网站的webshell

把文件上传改成jpg的了,后来去信息楼了解到,ftp服务器密码 竟然登陆不上去。没办法 只好找老师解决问题了。

不过,首先得承认我的过错,暑假在家 一直在做事情,根本没有关注网站。

再者开学以后一直在攻克三级网络技术的考试,每天时间蛮紧,也没有时间查看网站的。

还好昨天在上传文件的时候发现了

今天发现更吐血的事了,先前做的一个小站被人XXOO了,郁闷。截图就不放上来了

强大的google有时候也是达摩克里斯之剑,可以拿来干的坏事,也不少啊。

查看了下是某国外著名黑客网站zone-h.org,这个自己想要看的话,可以看下面的介绍

据说曾经被中国黑客黑过,嘿嘿。

最近很是不太平,权威漏洞发布站点milw0rm.com开站了,听到这个消息,有些人很是兴奋。。。。

还有一些小道消息

下面有关马儿的介绍

ASPXspy2 介绍 还有

还有几个网络安全bolg

鬼仔’s Blog msnh4ck&晓华&晓华道士

有关zone-h.org的分析 被黑分析报告

暑假总结

看到51cmdshell同学在暑假干了不少的事,感觉很惭愧。像搭建aspx环境、发财了、搭建discuz等等这么多好玩的事,嗯,说下我自己

暑假我去社会实践去了。人倒是认识不少。吹牛的技术也提高了 。可是看家本领确实退步了不少。专业的书籍没看完不说,连考试都没怎么准备,额,见暑假计划 现在完全是搁浅了 唉

说到吹牛,我就不得不说下,我认识的几个人了。先说小赵吧,这女孩子家,吹牛也是不打草稿的,高中毕业,上大学未果。小赵有个男朋友那是吹牛的能 手,俩人看样子婚都还没有开始结,就跟我吹孩子都一两岁了,我当时我强忍着听下去,后来吹得太大,我实在受不了。只有揭穿他们了。

还有一个小周同学,比我大两岁,剧跟我吹他的同学电脑如何如何的厉害,那家伙盗个网游账号跟个玩似的,从青鸟里面出来的,十几分钟立马跟你把全区最 牛逼的人物跟你开过来。。。还破解免费上了一个月的网,不过最后被老板抓住了,听到这里我都快忍不住了,在我专业人士的面前,吹得是风生水起啊,后来我也 故意忽悠了他了一下,呵呵

说到这里,不得不总结下:

1.出来混的总是要还的

2.要会吹,不仅吹得好,还得要一定的技术功底。

3.要学会生活,社会是残酷的,生活是现实的

4.学会照顾自己,什么是对自己最好,自己应该很清楚。

5.生活全靠双手。

6.要有几个真正的朋友。能当你哥们的那种。

7.必须奋斗。

就像奋斗里面第一集的台词一样:

这件事十万火急,一天也不能等,我们必须去奋斗!