C#学习日记 – 素数判断与Python的速度对比和语言的互通性

一年前第一次使用 Python 写了素数判断《Python学习日记 – 素数判断》,在前几天,我刚获得了一本新书 —— 《C# 图解教程》,并且前几天和朋友们讨论了编程语言的效率,就想能不能用 C# 来写素数判断,与 Python 的素数判断作比较。因为我在 Python 中所写的素数判断算法十分低效,导致在超过八位数之后的素数计算将会十分缓慢,而 C# 的效果是如何的,还不得而知。

为了作以对比,我在 C# 中使用了和 Python 同样的计算方法,以下是视频作以对照。

没有视频请刷新页面

Python 中,代码的写法和我 《Python学习日记 – 素数判断》 的有一点出入,因为引入了 time 模块,为程序计时,而 C# 中使用了 System.Diagnostics 对程序进行计时,二者均为语言的内置模块,对程序运行并无太大影响。

观看视频后,可以很明显发现,使用同样的算法,C# 的运行速度是 Python 的数倍,但作为代价,C# 的编写会比 Python 复杂许多。

让我们为代码去除计时部分以及冗余部分。

Console.Write("请输入一个整数:");
int InputNumber = Convert.ToInt32(Console.ReadLine());
int ConutNumber = 0;
for (int i = 1; i < InputNumber; i++)
{
    if (InputNumber % i == 0)
    {
        ConutNumber = ConutNumber + 1;
    }
}
if (ConutNumber >= 2)
{
    Console.WriteLine($"{InputNumber} 不是素数");
}
else
{
    Console.WriteLine($"{InputNumber} 是素数");
}

x = int(input('输入一个数:'))
z = 0
for i in range(1,x+1):
    if x % i == 0:
        z = z+1
if z >= 2:
    print(f"{x} 不是素数")
else:
    print(f"{x} 是素数")

这两段代码,第一段是使用 C# 书写的,而第二段是使用 Python 书写的,所使用的算法都是让这个数除以从 1 到这个数的所有数,检查这个数可以被几个数整除,如果数量超过 2 个就代表它是素数。

在使用同样算法的情况下,C# 的速度超越 Python 好几倍,高性能的背后带来的是语法的复杂,但我们对比后发现,两种不同的语言竟然有异曲同工之妙,假设你只学过 Python 的语法,而现在转过头来看 C# 就会发现,在 C# 中我们同样使用了方法输入内容,同样是使用了 if-else 语句对计算的数进行了判断,甚至也使用了同样判断大小的方法和取模的方法。

这也是为什么,我们建议编程的初学者学习相对简单的语言来走进代码世界的原因。

当然,如果我们需要让这个算法更快速,其实可以走一个更巧的路径,由于 Python 简单,我们以 Python 的写法为例来改进素数的计算方式。

由于在上述算法中,我们需要使用 1x+1 所有数去除输入的数,会导致特别大的数分明已经被多个数整除,z 的数值已经来到了大于 2 的值,但 for 循环却未被打破,解决方法也很简单,让我们在 for 循环内写入对 z 数值的判断即可解决这个问题。

if z >= 2:
    break;

如果在 for 中这个数大于等于了 2,就会将 for 打破,此时 z 的数值已经大于了 2 了,就可以成功判断出它不是素数,当然,如果使用同样的方法,精确到毫秒的话,还是 C# 更胜一筹

此文由 Magneto 发布,本文采用《CC BY-NC-ND 4.0》协议,转载必须注明作者和本文链接。
暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
小恐龙
酷安
颜文字
Emoji
花!
上一篇
下一篇