数学中国

 找回密码
 注册
搜索
热搜: 活动 交友 discuz
楼主: moranhuishou

一款可瞬间判定素数的神奇小软件

[复制链接]
 楼主| 发表于 2008-9-15 11:59 | 显示全部楼层

一款可瞬间判定素数的神奇小软件

下面引用由天山草2008/09/13 09:56am 发表的内容:
估计楼主不需要除法程序。先贴这些吧,程序未经优化,你先试用吧。
這幾天一直沒有在家(只有家里的只有家里的电脑有vb程序),所以没办法验证.
初步看了一下,大数的四则分开计算应该没有问题,但是否能进行混合计算并且是循环混合四则计算还看不出来,最起码会很复杂,这还要进一步修改程序实践-----等回家再说吧.
另外,除法程序肯定也是需要的,希望天山草先生将除法程序贴出.
发表于 2008-9-15 13:46 | 显示全部楼层

一款可瞬间判定素数的神奇小软件

估计还需要求余程序。乘方程序。
其实它们的原理都一样。混合计算也是这种原理。
 楼主| 发表于 2008-9-15 13:59 | 显示全部楼层

一款可瞬间判定素数的神奇小软件

下面引用由simpley2008/09/15 01:46pm 发表的内容:
估计还需要求余程序。乘方程序。
其实它们的原理都一样。混合计算也是这种原理。
当然知道原理一样,但混合计算程序复杂的多,再加上初学编程,所以...

另:你也不要估计了,不是你理解的小定理那样,所以你估计的肯定不对!
发表于 2008-9-15 14:20 | 显示全部楼层

一款可瞬间判定素数的神奇小软件

只要单个程序(函数)编出来,混合计算就不是事了。
比如+是函数p,-是函数q,乘是函数r,除是函数s
d=p(a,b)
d=p(d,i)
d=s(d,a)
它表达的意思就是(a+b+i)/a

发表于 2008-9-16 08:31 | 显示全部楼层

一款可瞬间判定素数的神奇小软件

天山草先生:你可以试一下将这个字符串转换成一个256进制的数,这样每个字节就可以放一位,运算就不要在用到字符串了!如果你用的语言支持无符号64位整数,那么你还可以使用4294967296进制的数来运算。
发表于 2008-9-16 10:37 | 显示全部楼层

一款可瞬间判定素数的神奇小软件

天山草先生:这样的效率可能有些低,首先应该将字符串变成byte类型数组。这样一个数就变成了256位进制的数。再按乘法就可以运算了!
 楼主| 发表于 2008-9-18 18:50 | 显示全部楼层

一款可瞬间判定素数的神奇小软件

刚到家,整理了一下加法,这样行吧?还需要怎样“优化”?

Private Sub Command1_Click()
      
    Dim aa(100000) As Long      ';存放被加数的各位数字
    Dim bb(100000) As Long      ';存放加数的各位数字
    Dim cc(100000) As Long      ';存放和的各位数字
   
    a = Text1.Text
    b = Text2.Text
    GoSub sub1
   
   
   
   
    Exit Sub  ';主程序结束
   
sub1:
    La = Len(a)        ';把 a 字串(被加数)的各位数码放在数组 aa(i)中
    For i = 1 To La    ';aa(1)为最低位,aa(La)为最高位
      aa(i) = Mid(a, La - i + 1, 1)
    Next i
   
    Lb = Len(b)        ';把 b 字串(加数)的各位数码放在数组 bb(i)中
    For i = 1 To Lb    ';bb(1)为最低位,bb(La)为最高位
      bb(i) = Mid(b, Lb - i + 1, 1)
    Next i
   
    If La >= Lb Then LL = La Else LL = Lb
    For i = 1 To LL
      cc(i) = aa(i) + bb(i)
    Next i
   
    c = ""             ';处理进位
    For i = 1 To LL + 1
      If cc(i) >= 10 Then
         cc(i) = cc(i) - 10
         cc(i + 1) = cc(i + 1) + 1    ';此处可能产生 cc(LL + 1) = 1 的问题
      End If                          ';但不可能产生 cc(LL + 2) = 1 的问题
    c = Trim$(Str$(cc(i))) & c
    Next i
   
    cc(LL + 1) = 0:    ';cc(LL + 1) 清零,否则二次调用子程序时出错
   
   Text3.Text = c
   
    Return
   
    End Sub
发表于 2008-9-19 17:24 | 显示全部楼层

一款可瞬间判定素数的神奇小软件

    今天的《参考消息》报道:……美国洛杉矶的一个研究小组的创记录最大素数(比德国数学家发现的1100万位)更大,因为它超过了1200万位:2^43112609-1 。……以加州大学的埃德森.史密斯文为首的研究小组,赢得了美国电子产品维权基金会提供的10万美元大奖:他们发现的素数是第一个超过1000万位的。
    目前,在发现大素数方面,不断有报道。国外的数学家研究进展很快,就象奥运会中某一体育项目那样。不知道我国是否有人在研究。我国的数学家们不知道在干什么!我希望楼主可在这方面努力一下。
 楼主| 发表于 2008-9-19 18:04 | 显示全部楼层

一款可瞬间判定素数的神奇小软件

我国的数学家?哎,不提也罢...
现在梅森素数都是因特网梅森素数大搜索分布式计算项目发现的。
发表于 2008-9-19 18:24 | 显示全部楼层

一款可瞬间判定素数的神奇小软件

moranhuishou:先将字符串除以256进制的数,方法如下
字符串a1a2a3。。。an
建立一个新字符串和一个byte数组
取a1a2a3转换成整数后从a1a2a3。。。an中删除a1a2a3,和256比较,如果>=256就直接除256,如果<256,就用a1a2a3转换成的整数×10+a4换成的整数256,从a1a2a3。。。an中删除a4,这样就得到一个商和一个余数,将商放到字符串的第一位,将余数和后面的数组合成一个可以除以256的数注意从字符串中补一位,你的新字符串中就要加一个0,这样一直处理到字符串的最后一位。这样得到的余数就是byte数组的最低位。现在将新产生的字符串又按上面的办法处理就直到处理完成,就得到了一个256进制的数。是以byte数组保存的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|数学中国 ( 京ICP备05040119号 )

GMT+8, 2024-9-27 10:25 , Processed in 0.093750 second(s), 13 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表