ruby 学习笔记(1) 初识语法

单从技术而言,ruby本身确实很爽,令程序员的工作变得轻松有趣!
下面的代码演示了如何找出100以内的素数:

代码如下:

using System; 
namespace Mersenne 
{ 
class Program 
{ 
static void Main(string[] args) 
{ 
for (int i = 2; i < 50; i++) 
{ 
if (CheckDigital(i)) 
{ 
Console.WriteLine("{0} ",i); 
} 
} 
Console.ReadLine(); 
} 
static bool CheckDigital(int i) 
{ 
if (i <= 1) { return false; } 
if (i == 2) { return true; } 
bool _result = true; 
for (int j = 2; j < i; j++) 
{ 
if (i % j == 0) 
{ 
_result = false; 
break; 
} 
} 
return _result; 
} 
} 
}

参照这个思路,翻译成ruby版:

代码如下:

for i in 2..100 
flag = true; 
for j in 2...i 
if i % j==0 
flag = false; 
break; 
end 
end 
if flag 
print i,"\n" 
end 
end

利用ruby语法的灵活性,可以精简成以下代码:

代码如下:

for i in 2..100 
flag = true; 
(2...i).each{|n| flag=false if i % n ==0} 
print i,"\n" if flag 
end

也可以写成这样

代码如下:

def checkNum?(num) 
return true if num==2 
f = true; 
for j in 2...num 
if num % j==0 
f = false; 
break 
end 
end 
return f 
end

(2..50).each{|x| print x,"\n" if checkNum?(x)}
另外一种实现:

代码如下:

$arr=[] #定义一个全局数组,用来保存计算结果 
$arr[0] = 2 
#定义方法,将n以内的奇素数加入$arr (素数同时肯定奇数,2除外) 
def add_prime(n) 
3.step(n,2){|num| $arr<<num if is_prime? num} 
end 
#定义方法 判断是否为素数 
def is_prime?(number) 
j=0 
while $arr[j] * $arr[j] <=number 
return false if number % $arr[j] ==0 
j +=1 
end 
return true 
end 
add_prime(50); #调用 
puts $arr.join(',') #输出结果

作者:菩提树下的杨过

相关推荐