免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: xyfree
打印 上一主题 下一主题

删帖吧 [复制链接]

论坛徽章:
0
41 [报告]
发表于 2010-06-24 15:42 |只看该作者
本帖最后由 狗气球 于 2010-06-24 17:00 编辑
回复  狗气球


    可是你要证明完全平方数的因数个数是奇数,就不得不利用素数来证明。
    难道这样 ...
xyfree 发表于 2010-06-24 15:20



    我觉得真不用质数就能证明。

    你的做法是基于“质因数分解”的。
    这道题实际上用“因数分解”就够了。确实是小学奥数。

    对一个自然数m,列出它所有的因数x1, x2, ... xn(用与你不同的字母以免混淆),并且要求这个序列是升序排列的。
    我们可以知道,必然是m = x1 * xn = x2 * xn-1 = x3 * xn-2 = ... = xn * x1(证明略,因为是小学奥数。)
    现在的情况就是, n是奇数还是偶数。
    我们知道,x1 < x2 < ... < xn,(不能有任何两个相等,这是“列出所有因数”的要求,如果是小学奥数,这就是直觉的结论了。当然这个可以证明。)
---
    如果n是奇数,则必然有一个x (n / 2),则m = x (n / 2) * x(n / 2),亦即m是平方数。
    如果n是偶数,则必然没有一个x(n/2),则没有m = xi * xi(i任意)。
---
↑这里写错了,是x((n+1)/2)

    以上如果是小学奥数,就已经做完了。

论坛徽章:
0
42 [报告]
发表于 2010-06-24 15:57 |只看该作者
回复 41# 狗气球


    厉害啊

论坛徽章:
0
43 [报告]
发表于 2010-06-24 16:01 |只看该作者
#!/usr/bin/perl -w
use strict;
my @lights;
foreach (1 .. 100){
        $lights[$_]=0;
}
foreach my $i (1 .. 100){
        foreach (1 .. 100){
                if(($_ % $i)==0) {
                        $lights[$_]++;
                }   
                if($lights[$_] == 2 ) {
                        $lights[$_]=0;
                }   
        }   
        if($lights[$i]==1){
                print "light->$i is open!\n";
        }   
}

想那么多别累着{:3_195:}

论坛徽章:
0
44 [报告]
发表于 2010-06-24 16:01 |只看该作者
小学奥数。。。。。。。

论坛徽章:
0
45 [报告]
发表于 2010-06-24 16:17 |只看该作者
1 4 9 16 25 36 49 64 81 100
想到完全平方数的小学数学不错
写程序的,暴力破解的都程序员
我小学挺好,长大了不学好。。。

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
46 [报告]
发表于 2010-06-24 16:37 |只看该作者
#!/usr/bin/perl -w
use strict;
my @lights;
foreach (1 .. 100){
        $lights[$_]=0;
}
foreac ...
heidern 发表于 2010-06-24 16:01



    都perl了你还这么累赘,你咋不去写C捏…………

use strict;

my @lights;
foreach my $i (1 .. 100) {
    foreach ($i .. 100) {
        $lights[$_] = !$lights[$_] if $_ % $i == 0;
    }   
    print "light->$i is open!\n" if $lights[$i];
}

论坛徽章:
0
47 [报告]
发表于 2010-06-24 16:42 |只看该作者
回复 41# 狗气球


    呃,厉害,很直观的证明方法。
    再一次证明了这道题和IT甚至高等一点的数学知识都没有关系.....

论坛徽章:
0
48 [报告]
发表于 2010-06-24 16:56 |只看该作者
都perl了你还这么累赘,你咋不去写C捏…………

use strict;

my @lights;
foreach my $i ( ...
starwing83 发表于 2010-06-24 16:37



编程语言是本来就是累赘.我用它解决问题,写的好不好 问题能解决就行  
2年前需要在win环境下写个网络测试工具,没win编程经验,半夜2点花了30分钟看了一个忘了叫什么的脚本语言的教程,又花30分钟代码写好测试通过了,这才叫有用.
花那么多时间考虑算法,你浪不浪费公司的钱?

论坛徽章:
0
49 [报告]
发表于 2010-06-24 18:07 |只看该作者
public class OpenClose {
        public final static int LIGHT_NUMBER = 100 ;
       
        public static boolean checkOn(int light){
                int j = 0 ;
                for (int i = 1; i < light; i++) {
                        if (light % i == 0) {
                                j++ ;
                        }
                }
                return (j % 2 == 0)  ;
        }

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                for (int i = 1; i < LIGHT_NUMBER; i++) {
                        System.out.println("Line Number:[" + i + "],State:[" + (checkOn(i)?"ON":"OFF") + "]");
                }
        }

}

论坛徽章:
0
50 [报告]
发表于 2010-06-24 18:08 |只看该作者
大于1的整数N有一个约数p,则N/p必为N的约数,除非存在一个整数p,使得N/p=p,否则,N的约数个数,在包括1和和N本身的情况下必为偶数。

即大于1的整数的约数是奇数个的N必然存在一个整数p,使得p^2 = N。

故,只有N是某个整数的平方时,才能够开关奇数次。

果然是小学奥数题目……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP