设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
楼主: 876加几
打印 上一主题 下一主题

[讨论] 大家会哪几种代码?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
68
在线时间
585 小时
注册时间
2013-5-25
帖子
1524
21
发表于 2014-7-30 18:18:40 | 只看该作者
876加几 发表于 2014-7-30 18:07
继续演示!!!

Public Module Judge

帮我写个代码找出最大的质数,不谢

点评

没有最大的质数  发表于 2014-7-30 20:14
回复

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

22
发表于 2014-7-30 18:23:10 | 只看该作者
本帖最后由 taroxd 于 2014-7-31 08:49 编辑
876加几 发表于 2014-7-30 18:07
继续演示!!!

Public Module Judge


看了楼主的代码,楼主完全不会 VB.net 和 Ruby。鉴定完毕。

RUBY 代码复制
  1. # 懒得 require 'prime' 了
  2. # 暂不考虑效率。想要效率去拿概率什么的算法去。
  3. def prime?(n)
  4.   n > 1 && (2..n / 2).all? {|i| n % i != 0 }
  5. end
  6.  
  7. [15, 16].each {|n| puts "#{n}是#{prime?(n) ? "" : ""}数" }
  8.  
  9. def 最大公约数(*nums)
  10.   nums.inject(:gcd)
  11. end
  12.  
  13. p 最大公约数(60, 72, 40) #=> 4


点评

赞同30楼概率算法  发表于 2014-7-31 08:49
赞同@余烬之中 循环次数sqr(n)  发表于 2014-7-30 21:39
我还是习惯 require 'prime'  发表于 2014-7-30 20:40
我还是习惯(2..Math.sqrt n)  发表于 2014-7-30 20:38
方法哪来的?  发表于 2014-7-30 20:15

评分

参与人数 3星屑 +44 收起 理由
876加几 + 1 -1 VIP
shy + 23 nice
进击の虎叔 + 20 点赞_(:з」∠)_

查看全部评分

回复

使用道具 举报

Lv1.梦旅人

矿工

梦石
0
星屑
134
在线时间
898 小时
注册时间
2012-10-5
帖子
1535
23
 楼主| 发表于 2014-7-30 20:23:09 | 只看该作者
本帖最后由 876加几 于 2014-7-30 20:25 编辑

昨天写的VB.NET:
VB 代码复制
  1. Public Class GameArray
  2.     '变量
  3.     Private ary(13, 13) As Integer
  4.     '调用
  5.     Public Sub New()
  6.         Make()
  7.     End Sub
  8.     '调用数据
  9.     Public ReadOnly Property Data() As Integer(,)
  10.         Get
  11.             Return ary
  12.         End Get
  13.     End Property
  14.     '制作
  15.     Sub Make()
  16.         Dim x, y As Integer
  17.         For x = 0 To 12
  18.             For y = 0 To 12
  19.                 If x = 6 And y = 6 Then
  20.                     ary(x, y) = 2
  21.                 ElseIf Int(Rnd() * 10) = 1 Then
  22.                     ary(x, y) = 1
  23.                 Else
  24.                     ary(x, y) = 0
  25.                 End If
  26.             Next
  27.         Next
  28.     End Sub
  29.  
  30.     '注释
  31.  
  32.     '可通行区域 = 0
  33.     '禁止通行区域 = 1
  34.     '老鼠 = 2
  35.  
  36.     '是否相邻判断
  37.     Function adjoin(ByVal x1 As Integer, ByVal y1 As Integer, ByVal x2 As Integer, ByVal y2 As Integer) As Boolean
  38.         If Not (Valid(x1, x2) = True And Valid(x2, y2) = True) Then
  39.             Throw New Exception("存在无效坐标。")
  40.         End If
  41.         If Math.Abs(x2 - x1) = 1 Or Math.Abs(y2 - y1) = 1 Then
  42.             Return True
  43.         End If
  44.         Dim num As Integer
  45.         num = y1 Mod 2
  46.         If num = 0 Then '奇数行靠左
  47.             If Math.Abs(y2 - y1) = 1 And x1 - x2 = 1 Then
  48.                 Return True
  49.             End If
  50.         Else '偶数行靠右
  51.             If Math.Abs(y2 - y1) = 1 And x2 - x1 = 1 Then
  52.                 Return True
  53.             End If
  54.         End If
  55.         Return False
  56.     End Function
  57.  
  58.     '相邻可通行区域
  59.     Function AdjoinAndPossable(ByVal x As Integer, ByVal y As Integer) As Integer()()
  60.         If Valid(x, y) = False Then
  61.             Throw New Exception("无效坐标。")
  62.         End If
  63.         Dim x1, y1 As Integer
  64.         Dim Coordinate As Integer()() = {}
  65.         Dim SelfAry(2) As Integer
  66.         For x1 = 0 To 12
  67.             For y1 = 0 To 12
  68.                 SelfAry(0) = x1
  69.                 SelfAry(1) = y1
  70.                 If adjoin(x, y, x1, y1) = True And Me.Data(x1, y1) = 1 = False Then
  71.                     ArrayAdd(Coordinate, SelfAry)
  72.                 End If
  73.             Next
  74.         Next
  75.         Return Coordinate
  76.     End Function
  77.  
  78.     '有效
  79.     Function Valid(ByVal x As Integer, ByVal y As Integer) As Boolean
  80.         Return (x >= 0 And x < 13 And y >= 0 And y < 13)
  81.     End Function
  82.  
  83.     '清除老鼠
  84.     Sub MoveMouse()
  85.         Dim x, y As Integer
  86.         For x = 0 To 12
  87.             For y = 0 To 12
  88.                 If ary(x, y) = 2 Then
  89.                     ary(x, y) = 0
  90.                     Exit Sub
  91.                 End If
  92.             Next
  93.         Next
  94.     End Sub
  95.  
  96.     '移动老鼠
  97.     Sub MoveMouse(ByVal x As Integer, ByVal y As Integer)
  98.         If Valid(x, y) = False Then
  99.             Throw New Exception("无效坐标。")
  100.         End If
  101.         Dim x1, y1 As Integer
  102.         For x1 = 0 To 12
  103.             For y1 = 0 To 12
  104.                 If ary(x1, y1) = 2 Then
  105.                     ary(x1, y1) = 0
  106.                 End If
  107.             Next
  108.         Next
  109.         ary(x, y) = 2
  110.     End Sub
  111.  
  112.     '添加障碍 (返回是否成功)
  113.     Function AddBlock(ByVal x As Integer, ByVal y As Integer) As Boolean
  114.         If Valid(x, y) = False Then
  115.             Throw New Exception("无效坐标。")
  116.         End If
  117.         Dim x1, y1 As Integer
  118.         Dim mouse(2) As Integer
  119.         For x1 = 0 To 12
  120.             For y1 = 0 To 12
  121.                 If ary(x1, y1) = 2 Then
  122.                     mouse(0) = x1
  123.                     mouse(1) = y1
  124.                 End If
  125.             Next
  126.         Next
  127.         If (mouse(0) = x And mouse(1) = y) Or (Data(x, y) = 1) Then
  128.             Return False
  129.         End If
  130.         ary(x, y) = 1
  131.         Return True
  132.     End Function
  133. End Class

以前写的Ruby:
RUBY 代码复制
  1. module Function
  2.   PI = 3.1415926535897932385
  3.   E = 2.7182818284590452354
  4.   BITS = 32
  5.   PHI = 1.6180339887498948482
  6.   TAU = 2 * PI
  7.   ABTS = 32
  8.   GAMMA = 0.5772156649015328606
  9.   C2 = 0.6601618158468695739
  10.   def gamma(x)
  11.     x = x.truncate == x ? x.truncate : x
  12.     if x.is_a?(Integer)
  13.       if x > 0
  14.         return fact(x)
  15.       else
  16.         raise ArgumentError.new("wrong number")
  17.       end
  18.     else
  19.       if x > 0
  20.         num = sqrt(2 * PI / x) * (1.0 / E * sqrt(x + 1.0 / (12 * x - 1.0 / (10 * x))))
  21.       else
  22.         num = gamma(1 - (n.abs - Integer(n.abs)))
  23.         for t in 1..Integer(n.abs) + 1
  24.           i = 1 - (n.abs - Integer(n.abs)) - t
  25.           num /= i
  26.         end
  27.       end
  28.     end
  29.     return num.truncate == num ? num.truncate : num rescue Infinity
  30.   end
  31.   def s_dec(x)
  32.     a = x.to_s.scan(/./)
  33.     dd = false
  34.     for s in 0...a.size
  35.       if dd
  36.         break
  37.       end
  38.       for c in 0...a.size
  39.         i = a[c]
  40.         if i == "."
  41.           a.shift
  42.           dd = true
  43.           break
  44.         else
  45.           a.shift
  46.           break
  47.         end
  48.       end
  49.     end
  50.     return a.to_s
  51.   end
  52.   def about(x, y)
  53.     num = Integer(x.abs)
  54.     ary = s_dec(x).scan(/./)
  55.     for i in 0...ary.size
  56.       ns = ary[i]
  57.       nt = ns.to_i
  58.       ntc = nt
  59.       ntc *= 10 ** (-i - 1)
  60.       if i < y and not i - y == -1
  61.         num += ntc
  62.       elsif i - y == -1
  63.         num += ntc
  64.         if ary[i + 1].to_i >= 5
  65.           num += 10 ** (-y)
  66.         end
  67.         break
  68.       else
  69.         break
  70.       end
  71.     end
  72.     if x < 0
  73.       num = -num
  74.     end
  75.     return num.truncate == num ? num.truncate : num
  76.   end
  77.   def fact(x)
  78.     x = x.truncate == x ? x.truncate : x
  79.     if x.is_a?(Integer)
  80.       if x < 0
  81.         raise ArgumentError.new("wrong number")
  82.       elsif x < 2
  83.         return 1
  84.       else
  85.         return x * fact(x - 1) rescue Infinity
  86.       end
  87.     else
  88.       return gamma(x + 1)
  89.     end
  90.   end
  91.   def sqrt(x)
  92.     if x < 0
  93.       raise ArgumentError.new("wrong number")
  94.     end
  95.     num = x ** 0.5
  96.     return num.truncate == num ? num.truncate : num
  97.   end
  98.   def sqr(x)
  99.     return x ** 2
  100.   end
  101.   def cube(x)
  102.     return x ** 3
  103.   end
  104.   def cuberoot(x)
  105.     if x < 0
  106.       return -cuberoot(-x)
  107.     end
  108.     num = x ** (1.0 / 3)
  109.     return num.truncate == num ? num.truncate : num
  110.   end
  111.   def root(x, y)
  112.     if (x.abs != self and y % 2 == 0) or y == 0
  113.       raise ArgumentError.new("wrong number")
  114.     end
  115.     if x.abs != x
  116.       num = (x * (-1)) ** (1.0 / y)
  117.       return num.truncate == num ? -num.truncate : -num
  118.     end
  119.     num = x ** (1.0 / y)
  120.     return num.truncate == num ? num.truncate : num
  121.   end
  122.   def sin(x)
  123.     while x < 0
  124.       x += TAU
  125.     end
  126.     x %= TAU
  127.     num = sum(0, BITS){|n| (-1) ** n * x ** (2 * n + 1) / fact(2 * n + 1).to_f}
  128.     num = about(num, ABTS)
  129.     return num.truncate == num ? num.truncate : num
  130.   end
  131.   def sind(x)
  132.     return sin(x * PI / 180.0)
  133.   end
  134.   def sing(x)
  135.     return sind(x * 0.9)
  136.   end
  137.   def cos(x)
  138.     num = sqrt((1 - sqr(sin(x))).abs)
  139.     if x % TAU >= PI
  140.       num = -num
  141.     end
  142.     return num.truncate == num ? num.truncate : num
  143.   end
  144.   def cosd(x)
  145.     return cos(x * PI / 180.0)
  146.   end
  147.   def cosg(x)
  148.     return cosd(x * 0.9)
  149.   end
  150.   def tan(x)
  151.     return sin(x) / cos(x)
  152.   end
  153.   def tand(x)
  154.     return sind(x) / cosd(x)
  155.   end
  156.   def tang(x)
  157.     return sing(x) / cosg(x)
  158.   end
  159.   def sum(min, max)
  160.     ary = []
  161.     for i in min..max
  162.       ary.push(yield(i))
  163.     end
  164.     num = 0
  165.     for n in ary
  166.       num += n
  167.     end
  168.     return num.truncate == num ? num.truncate : num rescue Nan
  169.   end
  170.   def multi(min, max)
  171.     ary = []
  172.     for i in min..max
  173.       ary.push(yield(i))
  174.     end
  175.     num = ary[0]
  176.     ary.shift
  177.     for n in ary
  178.       num *= n
  179.     end
  180.     return num.truncate == num ? num.truncate : num rescue Nan
  181.   end
  182.   def asin(x)
  183.     if x < -1 or x > 1
  184.       raise ArgumentError.new("wrong number")
  185.     end
  186.     num = 2 * atan(x / (1 + sqrt(1 - sqr(x))).to_f)
  187.     return num.truncate == num ? num.truncate : num
  188.   end
  189.   def acos(x)
  190.     num = PI / 2 - asin(x)
  191.     return num.truncate == num ? num.truncate : num
  192.   end
  193.   def atan(x)
  194.     num = x / (1 + sqr(x)).to_f * sum(0, BITS){|n| n == 0 ? 1 : multi(1, n){|k| 2 * k * sqr(x) / ((2 * k + 1) * (1 + sqr(x))).to_f}}
  195.     return num.truncate == num ? num.truncate : num
  196.   end
  197.   def asind(x)
  198.     num = asin(x) * 180 / PI
  199.     return num.truncate == num ? num.truncate : num
  200.   end
  201.   def acosd(x)
  202.     num = 90 - asind(x)
  203.     return num.truncate == num ? num.truncate : num
  204.   end
  205.   def atand(x)
  206.     num = atan(x) * 180 / PI
  207.     return num.truncate == num ? num.truncate : num
  208.   end
  209.   def erf(x)
  210.     num = 2.0 / sqrt(PI) * sum(0, BITS){|n| (-1) ** n * x ** (2 * n + 1) / fact(n) * (2 * n + 1)}
  211.     num = about(num, ABTS)
  212.     return num.truncate == num ? num.truncate : num
  213.   end
  214.   def erfc(x)
  215.     return 1 - erf(x)
  216.   end
  217.   def sgn(x)
  218.     return x <=> 0
  219.   end
  220.   def aerf(x)
  221.     num = sum(0, BITS){|g| erf_c(g) / (2 * g + 1).to_f * (sqrt(PI) / 2 * x) ** (2 * g + 1)}
  222.     return num.truncate == num ? num.truncate : num
  223.   end
  224.   def aerfc(x)
  225.     return aerf(1 - x)
  226.   end
  227.   def ln(x)
  228.     if x < 0
  229.       raise ArgumentError.new("wrong number")
  230.     end
  231.     y = (x - 1) / (x + 1)
  232.     num = 2 * y * (1 + sum(1, BITS){|n| 1.0 / (2 * n + 1) * y ** (2 * n)})
  233.     return num.truncate == num ? num.truncate : num
  234.   end
  235.   def lg(x)
  236.     if x < 0
  237.       raise ArgumentError.new("wrong number")
  238.     end
  239.     num = ln(x) / ln(10)
  240.     return num.truncate == num ? num.truncate : num
  241.   end
  242.   def log(x, y)
  243.     if x < 0 or (y <= 0 or y == 1)
  244.       raise ArgumentError.new("wrong number")
  245.     end
  246.     num = lg(y) / lg(x)
  247.     return num.truncate == num ? num.truncate : num
  248.   end
  249.   def sinh(x)
  250.     num = (E ** x - E ** (-x)) / 2
  251.     return num.truncate == num ? num.truncate : num
  252.   end
  253.   def cosh(x)
  254.     num = (E ** x + E ** (-x)) / 2
  255.     return num.truncate == num ? num.truncate : num
  256.   end
  257.   def tanh(x)
  258.     num = sinh(x) / cosh(x)
  259.     return num.truncate == num ? num.truncate : num
  260.   end
  261.   def asinh(x)
  262.     num = ln(x + sqrt(sqr(x) + 1))
  263.     return num.truncate == num ? num.truncate : num
  264.   end
  265.   def acosh(x)
  266.     num = ln(x + sqrt(sqr(x) - 1))
  267.     return num.truncate == num ? num.truncate : num
  268.   end
  269.   def atanh(x)
  270.     num = ln(sqrt(1 - sqr(x)) / (1 - x))
  271.     return num.truncate == num ? num.truncate : num
  272.   end
  273.   def beta(x, y)
  274.     num = (gamma(x) * gamma(y)) / gamma(x + y)
  275.     return num.truncate == num ? num.truncate : num
  276.   end
  277.   def dms(x)
  278.     ary = x.split(1, true)
  279.     na = [ary[0].to_s, ".", ""]
  280.     for i in ary[1]
  281.       str = (i * 60).to_s
  282.       na[2] += str
  283.     end
  284.     num = na.to_s.to_f
  285.     return num.truncate == num ? num.truncate : num
  286.   end
  287.   def Int(x)
  288.     return Integer(x)
  289.   end
  290.   def gen_e(x, y)
  291.     num = fact(x) / sqrt(PI) * sum(0, BITS){|p| (-1) ** p * ((y ** (x * p + 1)).to_f / ((x * p + 1) * fact(p)))}
  292.     return num.truncate == num ? num.truncate : num
  293.   end
  294.   def erf_c(x)
  295.     if x == 0
  296.       return 1
  297.     end
  298.     num = sum(0, x - 1){|m| erf_c(m) * erf_c(x - 1 - m) / ((m + 1) * (2 * m + 1)).to_f}
  299.     return num.truncate == num ? num.truncate : num
  300.   end
  301.   def Frac(x)
  302.     num = x - Int(x)
  303.     return num.truncate == num ? num.truncate : num
  304.   end
  305.   def adms(x)
  306.     ary = x.split(2, true)
  307.     na = [ary[0].to_s, ".", ""]
  308.     for i in ary[1]
  309.       if i > 60
  310.         raise ArgumentError.new("wrong number")
  311.       end
  312.       n = i / 6 / 10
  313.       na.push(n)
  314.     end
  315.     num = na.to_s.to_f
  316.     return num.truncate == num ? num.truncate : num
  317.   end
  318.   def atan2(y, x)
  319.     num = atan(y) / atan(x)
  320.     return num.truncate == num ? num.truncate : num
  321.   end
  322.   def atand2(y, x)
  323.     num = atand(y) / atand(x)
  324.     return num.truncate == num ? num.truncate : num
  325.   end
  326. end
  327.  
  328. class Object
  329.   include Function
  330. end
(未包括number.split,本来写过的此方法)
呃,发糖贴好冷清呀!
回复

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

24
发表于 2014-7-30 20:25:34 | 只看该作者
876加几 发表于 2014-7-30 20:23
昨天写的VB.NET:

Public Class GameArray

那你 nums.size 的 size 方法是哪来的?你能用 size 为什么我不能用 inject?

求和的代码在此,我卖萌都写得比你好:https://rpg.blue/thread-368425-1-1.html

看了一这一层的代码,你不会这些语言无误

点评

To 余烬之中:我真正使用的sum可以看我的基础设置脚本。那个求和就是在卖萌的  发表于 2014-7-30 21:05
经营商店游戏+鼠标系统,鼠标点一下计算器应该跳转到计算器界面。  发表于 2014-7-30 21:00
在RM就算写出来了计算器会有人用吗……  发表于 2014-7-30 20:55
互补误差函数Math.erfc  发表于 2014-7-30 20:54
RM编写个计算器界面可能用到……  发表于 2014-7-30 20:54
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
262 小时
注册时间
2009-1-10
帖子
309
25
发表于 2014-7-30 21:00:43 | 只看该作者
这个也太不全了点吧.....那么多编程语言orz
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2749
在线时间
2630 小时
注册时间
2013-1-16
帖子
5657

贵宾

26
发表于 2014-7-30 21:31:53 | 只看该作者
本帖最后由 myownroc 于 2014-7-30 21:39 编辑

楼主来个大数(几十位的数字,用字符串表示)相乘呗~语言无所谓啦~反正都看得懂

点评

↓调用API简直就是硬伤……  发表于 2014-7-31 20:38
反正觉得VB的代码很大 很不简洁(而且据说各种动态链接库也会导致程序冗余什么 这个就不是很清楚了)  发表于 2014-7-31 20:37
@余烬之中 动态数组无非就是多了声明数组大小而已(吧?)……  发表于 2014-7-31 20:33
我早就目测楼主不会VB了  发表于 2014-7-31 20:31
自从认识了ruby越来越觉得VB动态数组麻烦  发表于 2014-7-31 20:30
(Created by @喵kano)


施工现场:hotege.github.io
回复

使用道具 举报

Lv1.梦旅人

薄凉看客

梦石
0
星屑
50
在线时间
1269 小时
注册时间
2010-6-20
帖子
1316
27
发表于 2014-7-30 21:40:15 | 只看该作者
会的意思?是精通么??
这样的话  我不会rgss更不会Ruby

如果会的意思,是学习过或者了解过
那么,我只会一点点rgss1
不客气的说,rgss1的很多东西我都是不会的。
新手可能觉得我是高手,但事实上我水平到底如何大家都懂,只是些雕虫小技而已。


另外 rgss 不等于 Ruby !!

综上——我什么代码也不会。。

点评

shy
我……我……我……我精通国语!  发表于 2014-7-30 22:20
我……我……我……我精通日语!  发表于 2014-7-30 21:59
我精通伪代码  发表于 2014-7-30 21:45

评分

参与人数 1星屑 +50 收起 理由
taroxd + 50 什么代码都不会+1

查看全部评分

回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3582
在线时间
3065 小时
注册时间
2011-11-17
帖子
980
28
发表于 2014-7-31 00:00:35 | 只看该作者
  1. #include <iostream>
  2. #define 喵 {
  3. #define 呜 }
  4. #define 喵呜 <<
  5. #define 喵喵 using namespace std;
  6. #define 呜呜 cout
  7. #define 呜喵 endl
  8. #define 喵喵呜 ;
  9. #define 喵呜喵 int
  10. #define 呜呜喵 cout
  11. #define 呜喵呜 main()

  12. 喵喵 喵呜喵 呜喵呜 喵 呜呜 喵呜 "我种下一颗种子" 喵呜 呜喵 喵喵呜 呜呜 喵呜 "终于长出了果实" 喵呜 呜喵 喵喵呜 呜呜 喵呜 "今天是个伟大日子" 喵呜 呜喵 喵喵呜 呜
复制代码

评分

参与人数 1星屑 +10 收起 理由
taroxd + 10 233

查看全部评分

回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
705 小时
注册时间
2007-12-23
帖子
874
29
发表于 2014-7-31 08:09:53 | 只看该作者
876加几 发表于 2014-7-30 18:07
继续演示!!!

Public Module Judge


C的最大公因数(只支持两个数,但仅有一行)
  1. int gcd(int a,int b) {return b?gcd(b,a%b):a;}
复制代码

点评

所以说楼主不会嘛~  发表于 2014-7-31 08:12
买了正版RMMV的同学进来看一下,谢谢~
https://rpg.blue/thread-393237-1-1.html
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
705 小时
注册时间
2007-12-23
帖子
874
30
发表于 2014-7-31 08:26:15 | 只看该作者
本帖最后由 gonglinyuan 于 2014-7-31 08:29 编辑
876加几 发表于 2014-7-30 18:07
继续演示!!!

Public Module Judge


检测一个数是否是质数(Miller_Rabin+二次探测定理)(理论复杂度O(log N),18位十进制整数也秒出解)
  1. long long mul(long long a,long long b,long long n)
  2. {
  3.     long long ret=0;
  4.     while (b)
  5.     {
  6.         if (b&1) ret=(ret+a)%n;
  7.         a=(a+a)%n; b>>=1;
  8.     }
  9.     return ret;
  10. }  // 快速乘

  11. long long exp(long long a,long long b,long long n)
  12. {
  13.     long long ret=1;
  14.     while (b)
  15.     {
  16.         if (b&1) ret=mul(ret,a,n);
  17.         a=mul(a,a,n); b>>=1;
  18.     }
  19.     return ret;
  20. }  // 快速幂

  21. bool miller_rabin(long long n)
  22. {
  23.     if(n==2||n==3||n==5||n==7||n==11) return true;
  24.     if(n==1||!(n%2)||!(n%3)||!(n%5)||!(n%7)||!(n%11)) return false;
  25.     long long x,pre,u;
  26.     int i,j,k=0;
  27.     u=n-1;
  28.     while(!(u&1)) {k++; u>>=1;}
  29.     srand((long long)time(0));
  30.     for (i=0;i<S;++i)  // S是测试次数,越大正确率越高,一般大于5之后就基本全对
  31.     {
  32.         x=rand()%(n-2)+2;
  33.         if(!(x%n)) continue;
  34.         x=exp(x,u,n);
  35.         pre=x;
  36.         for (j=0;j<k;++j)
  37.         {
  38.             x=mul(x,x,n);
  39.             if (x==1&&pre!=1&&pre!=n-1) return false; //二次探测定理
  40.             pre=x;
  41.         }
  42.         if (x!=1) return false; //费马小定理
  43.     }
  44.     return true;
  45. }
复制代码

点评

正解。概率神马的效率高多了  发表于 2014-7-31 08:47

评分

参与人数 2星屑 +300 收起 理由
myownroc + 250 谨受教
余烬之中 + 50 好评

查看全部评分

买了正版RMMV的同学进来看一下,谢谢~
https://rpg.blue/thread-393237-1-1.html
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-20 11:34

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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