寻找一亿内最大素数的程序C#和JAVA性能比较:)

topycsdn 2004-11-27 03:06:40
昨天晚上无聊,用C#写了个寻找一亿内最大素数的程序玩玩,后来又翻译成JAVA的,算法绝对一样.
运算时间如下:

语言 费时 CPU
C# 47分 100%
JAVA 49分 88%

都是在同一台电脑上运行的,但是有个有趣的现象,当两个程序同时运行的时候,C#写的程序占用CPU80%,而JAVA只抢到了20%,呵呵,微软的东西~``

不过两种都是解释型语言,看来在运算速度上都偏慢,不过差距不大的:)
...全文
1036 38 打赏 收藏 转发到动态 举报
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
linfengcyl 2004-12-01
  • 打赏
  • 举报
回复
To:waximi(阿猫)
我层用过C#写SQL往数据库插记录,结果花了我很久才插了几百万条,最后放弃了。科学计算主要是机器的快慢,跟具体的语言关系不是特别大
--------------------------------------------------------
大哥:这个也不是和C#关系很大吧?而应该是和Sql server关系比较大(同硬件).一般批量插入用事务也更快些.
topycsdn 2004-12-01
  • 打赏
  • 举报
回复
呵呵,就算算法改快了有什么用?5分钟的运行时间看不出什么差别,只有运行久了才容易看出谁快谁慢嘛,是不?
不过还是感谢骨灰虫指出的错误,呵呵:)
crashloopbackoff 2004-12-01
  • 打赏
  • 举报
回复
难怪要算这么久,两个循环都有问题。
第一个循环:步长不应该是i++,因为大于2的偶数都是合数嘛,有什么好算的,步长改为+2。
第二个循环:g应该是i的平方根,而不应该是nnn的平方根。而且这个循环中ii应该遍历所有已经求出来的素数,而不应该是ii++这样去遍历。

我估计算1亿的话应该在5分钟左右,我用python算也就花了10分钟。
楼主可以改改,然后告诉大家结果。

尽量用最简单的数据结构和最简单的方法。不要输出,算完就给个提示,C#和JAVA输出机制的不同也会影响结果。尽量不要让循环体内出现C#或Java独有的方法。
topycsdn 2004-12-01
  • 打赏
  • 举报
回复
科学计算主要是机器的快慢,跟具体的语言关系不是特别大
========================

比较语言主要是语言的快慢,和机器配置关系不大~````
hanyaocsdn 2004-12-01
  • 打赏
  • 举报
回复
up
有趣
waximi 2004-12-01
  • 打赏
  • 举报
回复
我层用过C#写SQL往数据库插记录,结果花了我很久才插了几百万条,最后放弃了。科学计算主要是机器的快慢,跟具体的语言关系不是特别大
topycsdn 2004-12-01
  • 打赏
  • 举报
回复
补充:运行C#的代码的时候比运行JAVA代码的内存要高出4M左右:)
topycsdn 2004-12-01
  • 打赏
  • 举报
回复
把代码贴上来都觉得不好意思,因为我的代码写的并不好~``但是我觉得代码是否效率高和两个语言的比较并无啥关系:)毕竟是比较两语言运行这代码的速度,而代码写的好不好是另外一回事:)



c#/////////////////////////////////////////////////////////////////////

using System;

namespace ConsoleApplication1
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
System.DateTime mydata2,mydata1;
Console.Write("请输入查找个数:");
int nnn=Convert.ToInt32(Console.ReadLine());
mydata1=System.DateTime.Now;
int x=0;
int ii=0;
bool mybool;
double sum=0;
int g=System.Convert.ToInt32(System.Math.Sqrt(nnn)+1);
for (int i=2;i<=nnn;i++)
{
mybool=true;
for(ii=2;ii<g;ii++)
{

if(i % ii==0)
{
mybool=false;
sum++;
break;
}
}
if(mybool)
{
System.Console.Write(i.ToString()+",");
x++;
}

}
mydata2=System.DateTime.Now;
Console.WriteLine("\n\n\n找到个数:"+x.ToString()+" 运算次数:"+sum.ToString());
Console.WriteLine("\n运行时间:"+(mydata2-mydata1)+" 查找个数:"+nnn.ToString());
Console.WriteLine("\n"+mydata1.ToString()+" -- "+mydata2.ToString());
Console.ReadLine();



}
}
}




java///////////////////////////////////////////////////////////////
import java.util.Date;
public class T {
public T() {

}

public static void main(String[] args) {
T t = new T();
Date d1, d2;
d1 = new Date();
int x = 0;
double sum = 0;
double mm = 1000000000;
int g = (int) Math.sqrt(mm) + 1;
int i, ii;
boolean b = true;
for (i = 2; i <= mm; i++) {
b = true;
for (ii = 2; ii < g; ii++) {
if (i % ii == 0) {
b = false;
sum++;
break;
}

}
if (b) {
System.out.print(i + ",");
x++;
}
}
d2 = new Date();
System.out.println();
System.out.println("找到个数:"+x+" 运算次数:"+sum);
System.out.println(d1 + " -- " + d2);
}
}
zhy0101 2004-11-30
  • 打赏
  • 举报
回复
算法分析效率只与问题的规模有关,至于语言的差别不是很明显
crashloopbackoff 2004-11-30
  • 打赏
  • 举报
回复
C#/java与C++的差距不在速度上,在占用内存的数量上。
--------------------
内存的不断存取,难道不影响速度?内存又不是占着不动,要存取的嘛!
hel_ 2004-11-30
  • 打赏
  • 举报
回复
C#/java与C++的差距不在速度上,在占用内存的数量上。
cppTrier 2004-11-30
  • 打赏
  • 举报
回复
C#的程序占内存大有两方面的原因,启动C#的程序就要启动.net的虚拟机,这个就需要内存。另外一个对象退出作用域之后,所占的内存并没有马上被回收,而是要等到GC运行之后才行,这占了一部分内存。
crashloopbackoff 2004-11-30
  • 打赏
  • 举报
回复
真的对你的算法有怀疑哦,看看这个帖子。

http://community.csdn.net/Expert/topic/3409/3409231.xml?temp=.5807306
这位同学的算法在Python下找10000000以内所有素数,并且逐行输出,都不要你那么长时间。

而且这个算法稍稍改正一下,验证一个数的时候,不要去遍历所有已知素数,只要遍历到小于当前所求数的平方根的素数即可(这是Eratosthenes筛法,不知道中文怎么翻译)。这样一改的话,还可以快无数倍,不知道你是怎么算的。
ynnwq 2004-11-30
  • 打赏
  • 举报
回复
这种测试太偏激了。现在对很多应用来说,效率都不是第一位的了。
pec 2004-11-30
  • 打赏
  • 举报
回复
共享源代码
谢谢了
AhBian 2004-11-30
  • 打赏
  • 举报
回复
要是楼主不能贴出两个不同语言的源代码,我还是不能表示确信楼主的结论。

楼主可能对其中一种语言掌握得程序比较深和高,所以其中某一语言的代码比较完美,这也会导致比较结果的失实性。

烦请楼主贴出源代码来,大家一起比较一下。
fanghaifei 2004-11-30
  • 打赏
  • 举报
回复
微软搞的鬼了吧.
topycsdn 2004-11-30
  • 打赏
  • 举报
回复
大家不要误会我的意思,我只是比较C#和JAVA在运算方面的速度,并不是比较两种语言谁快,只是单纯的运算方面而已
还有不要老是什么“汇编”的挂着,我比较JAVA和C#关汇编什么事?机器码比汇编还快呢~~``

不过有趣的是,C#程序和JAVA程序同时运行时,系统大量的资源都给了C#,这点到是JAVA非常吃亏哦?我也不知道为什么~``
crashloopbackoff 2004-11-29
  • 打赏
  • 举报
回复
功能强大,易用易学。。。这些都是靠牺牲资源换来的。
如果不是这样的话,我想这里有一半以上的人不会写程序。
  • 打赏
  • 举报
回复
C#的程序为什么占内存,是不是垃圾会收机制还不成熟
加载更多回复(17)
2积分福利。2积分福利。2积分福利。2积分福利。2积分福利。2积分福利。2积分福利。2积分福利。2积分福利。2积分福利。2积分福利。 涵盖广泛 精炼的理论讲述搭配大量经典算法示例,学习查询兼而有之。 阐述到位 算法思想、算法实现和完整示例合理搭配,相辅相成。 示例完善 示例分析精准,代码注释精确,每段代码皆可通过编译执行。 计算机技术的发展和普及不仅改变了人们的生活和娱乐方式,也改变了人们的工作方式,这其中最为重要的便是计算机编程技术。现代的设计任务大多通过代码编程交给计算机来完成,其中算法起到了至关重要的作用。可以毫不夸张地说,算法是一切程序设计的灵魂和基础。 《C/C++常用算法手册》分3篇,共13章,“第1篇算法基础篇”介绍了算法概述,重点分析了数据结构和基本算法思想;“第2篇算法基本应用篇”详细讲解了算法在排序、查找、数值计算、数论、经典趣题和游戏中的应用;“第3篇算法高级应用篇”讲解了算法的一些高级应用技术,包括在密码学和数据压缩/解压缩中的应用。 《C/C++常用算法手册》知识点覆盖全面、结构安排紧凑、讲解详细、示例丰富。《C/C++常用算法手册》对每一个知识点都给出了相应的算法及应用示例。虽然这些例子都是以C语言来编写的,但是算法并不局限于C语言。如果读者采用其他编程语言,例如C++、C#、VB、Java等,根据其语法格式进行适当的修改即可。 《C/C++常用算法手册 》主要定位于有一定C/C++语言编程基础、想通过学习算法与数据结构提升编程水平的读者,也可作为具有一定编程经验的程序员以及大中专院校学生学习数据结构和算法的参考书。 第1篇 算法基础篇 1 第1章 算法概述 2 1.1 什么是算法 2 1.2 算法的发展历史 3 1.3 算法的分类 4 1.4 算法相关概念的区别 4 1.5 算法的表示 5 1.5.1 自然语言表示 5 1.5.2 流程图表示 6 1.5.3 N-S图表示 7 1.5.4 伪代码表示 7 1.6 算法的性能评价 8 1.7 算法实例 9 1.7.1 查找数字 9 1.7.2 创建项目 11 1.7.3 编译执行 12 1.8 算法的新进展 13 1.9 小结 14 第2章 数据结构 15 2.1 数据结构概述 15 2.1.1 什么是数据结构 15 2.1.2 数据结构中的基本概念 16 2.1.3 数据结构的内容 16 2.1.4 数据结构的分类 18 2.1.5 数据结构的几种存储方式 18 2.1.6 数据类型 19 2.1.7 常用的数据结构 20 2.1.8 选择合适的数据结构解决实际问题 21 2.2 线性表 21 2.2.1 什么是线性表 21 2.2.2 线性表的基本运算 22 2.3 顺序表结构 23 2.3.1 准备数据 23 2.3.2 初始化顺序表 24 2.3.3 计算顺序表长度 24 2.3.4 插入结点 24 2.3.5 追加结点 25 2.3.6 删除结点 25 2.3.7 查找结点 25 2.3.8 显示所有结点 26 2.3.9 顺序表操作示例 26 2.4 链表结构 30 2.4.1 什么是链表结构 30 2.4.2 准备数据 31 2.4.3 追加结点 31 2.4.4 插入头结点 33 2.4.5 查找结点 33 2.4.6 插入结点 34 2.4.7 删除结点 35 2.4.8 计算链表长度 36 2.4.9 显示所有结点 36 2.4.10 链表操作示例 37 2.5 栈结构 41 2.5.1 什么是栈结构 41 2.5.2 准备数据 42 2.5.3 初始化栈结构 42 2.5.4 判断空栈 43 2.5.5 判断满栈 43 2.5.6 清空栈 43 2.5.7 释放空间 44 2.5.8 入栈 44 2.5.9 出栈 44 2.5.10 读结点数据 45 2.5.11 栈结构操作示例 45 2.6 队列结构 48 2.6.1 什么是队列结构 48 2.6.2 准备数据 49 2.6.3 初始化队列结构 49 2.6.4 判断空队列 50 2.6.5 判断满队列 50 2.6.6 清空队列 50 2.6.7 释放空间 51 2.6.8 入队列 51 2.6.9 出队列 51 2.6.10 读结点数据 52 2.6.11 计算队列长度 52 2.6.12 队列结构操作示例 53 2.7 树结构 56 2.7.1 什么是树结构 56 2.7.2 树的基本概念 56 2.7.3 二叉树 57 2.7.4 准备数据 61 2.7.5 初始化二叉树 61 2.7.6 添加结点 62 2.7.7 查找结点 63 2.7.8 获取左子树 64 2.7.9 获取右子树 64 2.7.10 判断空树 65 2.7.11 计算二叉树深度 65 2.7.12 清空二叉树 65 2.7.13 显示结点数据 66 2.7.14 遍历二叉树 66 2.7.15 树结构操作示例 68 2.8 图结构 71 2.8.1 什么是图结构 71 2.8.2 图的基本概念 72 2.8.3 准备数据 76 2.8.4 创建图 78 2.8.5 清空图 79 2.8.6 显示图 79 2.8.7 遍历图 80 2.8.8 图结构操作示例 81 2.9 小结 84 第3章 基本算法思想 85 3.1 常用算法思想概述 85 3.2 穷举算法思想 85 3.2.1 穷举算法基本思想 86 3.2.2 穷举算法示例 86 3.3 递推算法思想 88 3.3.1 递推算法基本思想 88 3.3.2 递推算法示例 88 3.4 递归算法思想 90 3.4.1 递归算法基本思想 90 3.4.2 递归算法示例 90 3.5 分治算法思想 92 3.5.1 分治算法基本思想 92 3.5.2 分治算法示例 92 3.6 概率算法思想 96 3.6.1 概率算法基本思想 96 3.6.2 概率算法示例 97 3.7 小结 98 第2篇 算法基本应用篇 99 第4章 排序算法 100 4.1 排序算法概述 100 4.2 冒泡排序法 101 4.2.1 冒泡排序算法 101 4.2.2 冒泡排序算法示例 102 4.3 选择排序法 104 4.3.1 选择排序算法 104 4.3.2 选择排序算法示例 105 4.4 插入排序法 107 4.4.1 插入排序算法 107 4.4.2 插入排序算法示例 108 4.5 Shell排序法 110 4.5.1 Shell排序算法 110 4.5.2 Shell排序算法示例 111 4.6 快速排序法 113 4.6.1 快速排序算法 113 4.6.2 快速排序算法示例 114 4.7 堆排序法 116 4.7.1 堆排序算法 116 4.7.2 堆排序算法示例 121 4.8 合并排序法 123 4.8.1 合并排序算法 123 4.8.2 合并排序算法示例 126 4.9 排序算法的效率 129 4.10 排序算法的其他应用 130 4.10.1 反序排序 130 4.10.2 字符串数组的排序 132 4.10.3 字符串的排序 135 4.11 小结 137 第5章 查找算法 138 5.1 查找算法概述 138 5.2 顺序查找 138 5.2.1 顺序查找算法 139 5.2.2 顺序查找操作示例 139 5.3 折半查找 141 5.3.1 折半查找算法 141 5.3.2 折半查找操作示例 142 5.4 数据结构中的查找算法 145 5.4.1 顺序表结构中的查找算法 145 5.4.2 链表结构中的查找算法 148 5.4.3 树结构中的查找算法 151 5.4.4 图结构中的查找算法 152 5.5 小结 153 第6章 基本数学问题 154 6.1 判断闰年 154 6.2 多项式计算 156 6.2.1 —维多项式求值 156 6.2.2 二维多项式求值 158 6.2.3 多项式乘法 160 6.2.4 多项式除法 161 6.3 随机数生成算法 164 6.4 复数运算 171 6.4.1 简单的复数运算 172 6.4.2 复数的幂运算 174 6.4.3 复指数运算 176 6.4.4 复对数运算 177 6.4.5 复正弦运算 178 6.4.6 复余弦运算 179 6.5 阶乘 180 6.6 计算π的近似值 183 6.6.1 割圆术 183 6.6.2 蒙特卡罗算法 185 6.6.3 级数公式 187 6.7 矩阵运算 190 6.7.1 矩阵加法 190 6.7.2 矩阵减法 191 6.7.3 矩阵乘法 193 6.8 方程求解 195 6.8.1 线性方程求解——高斯消元法 195 6.8.2 非线性方程求解——二分法 200 6.8.3 非线性方程求解——牛顿迭代法 202 6.9 小结 205 第7章 复杂的数值计算算法 206 7.1 拉格朗日插值 206 7.1.1 拉格朗日插值算法 206 7.1.2 拉格朗日插值示例 207 7.2 数值积分 210 7.2.1 数值积分算法 210 7.2.2 数值积分示例 211 7.3 开平方 213 7.3.1 开平方算法 213 7.3.2 开平方示例 213 7.4 极值问题的求解算法 215 7.4.1 极值求解算法 215 7.4.2 极值求解示例 217 7.5 特殊函数的计算算法 221 7.5.1 伽玛函数 221 7.5.2 贝塔函数 224 7.5.3 正弦积分函数 228 7.5.4 余弦积分函数 231 7.5.5 指数积分函数 235 7.6 小结 239 第8章 经典数据结构问題 240 8.1 动态数组排序 240 8.1.1 动态数组的存储和排序 240 8.1.2 动态数组排序示例 241 8.2 约瑟夫环 243 8.2.1 简单约瑟夫环算法 243 8.2.2 简单约瑟夫环求解 245 8.2.3 复杂约瑟夫环算法 247 8.2.4 复杂约瑟夫环求解 248 8.3 城市之间的最短总距离 250 8.3.1 最短总距离算法 250 8.3.2 最短总距离求解 253 8.4 最短路径 257 8.4.1 最短路径算法 258 8.4.2 最短路径求解 260 8.5 括号匹配 265 8.5.1 括号匹配算法 265 8.5.2 括号匹配求解 267 8.6 小结 270 第9章 数论问题 271 9.1 数论 271 9.1.1 数论概述 271 9.1.2 数论的分类 272 9.1.3 初等数论 273 9.1.4 基本概念 273 9.2 完全数 274 9.2.1 完全数概述 274 9.2.2 计算完全数算法 275 9.3 亲密数 277 9.3.1 亲密数概述 277 9.3.2 计算亲密数算法 277 9.4 水仙花数 280 9.4.1 水仙花数概述 280 9.4.2 计算水仙花数算法 281 9.5 自守数 283 9.5.1 自守数概述 283 9.5.2 计算自守数算法 284 9.6 最大公约数 287 9.6.1 计算最大公约数算法——搌转相除法 287 9.6.2 计算最大公约数算法一一Stein算法 288 9.6.3 计算最大公约数示例 289 9.7 最小公倍数 290 9.8 素数 292 9.8.1 素数概述 292 9.8.2 计算素数算法 292 9.9 回文素数 294 9.9.1 回文素数概述 294 9.9.2 计算回文素数算法 294 9.10 平方回文数 297 9.10.1 平方回文数概述 297 9.10.2 计算平方回文数算法 297 9.11 分解质因数 299 9.12 小结 301 第10 章算法经典趣题 302 0. .l 百钱买百鸡 302 10.1.1 百钱买百鸡算法 302 10.1.2 百钱买百鸡求解 303 10.2 五家共井 304 10.2.1 五家共井算法 304 10.2.2 五家共井求解 305 10.3 鸡兔同笼 307 10.3.1 鸡兔同笼算法 307 10.3.2 鸡兔同笼求解 308 10.4 猴子吃桃 308 10.4.1 猴子吃桃算法 308 10.4.2 猴子吃桃求解 309 10.5 舍罕王赏麦 310 10.5.1 舍罕王赏麦问题 310 10.5.2 舍罕王赏麦求解 311 10.6 汉诺塔 312 10.6.1 汉诺塔算法 312 10.6.2 汉诺塔求解 314 10.7 窃贼问题 315 10.7.1 窃贼问题算法 315 10.7.2 窃贼问题求解 317 10.8 马踏棋盘 320 10.8.1 马踏棋盘算法 320 10.8.2 马踏棋盘求解 321 10.9 八皇后问题 323 10.9.1 八皇后问题算法 324 10.9.2 八皇后问题求解 325 10.10 寻找假银币 327 10.10.1 寻找假银币算法 327 10.10.2 寻找假银币求解 329 10.11 青蛙过河 331 10.11.1 青蛙过河算法 331 10.11.2 青蛙过河求解 333 10.12 三色旗 335 10.12.1 三色旗算法 335 10.12.2 三色旗求解 337 10.13 渔夫捕鱼 339 10.13.1 渔夫捕鱼算法 339 10.13.2 渔夫捕魚求解 340 10.14 爱因斯坦的阶梯 341 10.14.1 爱因斯坦的阶梯算法 341 10.14.2 爱因斯坦的阶梯求解 342 10.15 兔子产仔 342 10.15.1 兔子产仔算法 343 10.15.2 兔子产仔求解 343 10.16 常胜将军 344 10.16.1 常胜将军算法 344 10.16.2 常胜将军求解 345 10.17 新郎和新娘 346 10.17.1 新郎和新娘算法 347 10.17.2 新郎和新娘求解 348 10.18 三色球 349 10.18.1 三色球算法 349 10.18.2 三色球求解 350 10.19 小结 351 第11章 游戏中的算法 352 11.1 洗扑克牌 352 11.1.1 洗扑克牌算法 352 11.1.2 洗扑克牌示例 353 11.2 取火柴游戏 356 11.2.1 取火柴游戏算法 356 11.2.2 取火柴游戏示例 357 11.3 10点半 358 11.3.1 10点半算法 358 11.3.2 10点半游戏示例 363 11.4 生命游戏 368 11.4.1 生命游戏的原理 368 11.4.2 生命游戏的算法 369 11.4.3 生命游戏示例 371 11.5 小结 376 第3篇 算法高级应用篇 377 第12章 密码学算法 378 12.1 密码学概述 378 12.1.1 密码学的发展 378 12.1.2 密码学的基本概念 379 12.1.3 柯克霍夫斯原则 379 12.1.4 经典密码学算法 380 12.2 换位加密解密 381 12.2.1 换位加密解密算法 381 12.2.2 换位加密解密算法示例 383 12.3 替换加密解密 386 12.3.1 替换加密解密算法 386 12.3.2 替换加密解密算法示例 388 12.4 位加密解密 389 12.4.1 位加密解密算法 390 12.4.2 位加密解密算法示例 391 12.5 一次一密加密解密算法 392 12.5.1 一次一密加密解密算法 392 12.5.2 一次一密加密解密算法示例 394 12.6 小结 396 第13章 压缩与解压缩算法 397 13.1 压缩与解压缩概述 397 13.1.1 压缩与解压缩分类 397 13.1.2 典型的压缩解压缩算法 397 13.2 压缩算法 398 13.3 解压缩算法 401 13.4 压缩/解压缩示例 404 13.5 小结 406

110,549

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧