赞 | 3 |
VIP | 88 |
好人卡 | 6 |
积分 | 1 |
经验 | 19475 |
最后登录 | 2024-7-19 |
在线时间 | 245 小时 |
Lv1.梦旅人 CHAOS
- 梦石
- 0
- 星屑
- 107
- 在线时间
- 245 小时
- 注册时间
- 2005-11-4
- 帖子
- 3521
|
- public class suanfa1
- {
- private DateTime startDateTime;
- public DateTime StartDateTime
- {
- get { return startDateTime; }
- set { startDateTime = value; }
- }
- private DateTime endDateTime;
- public DateTime EndDateTime
- {
- get { return endDateTime; }
- set { endDateTime = value; }
- }
- private List<ulong> number;
- public List<ulong> Number
- {
- get { return number; }
- set { number = value; }
- }
- public void getzhishu(ulong max)
- {
- number = new List<ulong>();
- number.Add(2);
- number.Add(3);
- for (ulong i = 3; i < max; i+=2)
- {
- if (iszhishu(i, number))
- {
- number.Add(i);
- }
- }
- }
- private bool iszhishu(ulong i, List<ulong> number)
- {
- ulong hi=i/2;
- ulong num = 0;
- for (int j = 0; j < number.Count; j++)
- {
- num = number[j];
- if (num > hi) return true;
- if (i % num == 0)
- {
- return false;
- }
- }
- return true;
- }
- //程序入口
- public static void Main(string[] args)
- {
- ulong max = 100000;
- suanfa1 sf1 = new suanfa1();
- sf1.StartDateTime = DateTime.Now;
- sf1.getzhishu(max);
- sf1.EndDateTime = DateTime.Now;
- int count = sf1.Number.Count;
- StringBuilder sb = new StringBuilder();
- for (int i = 0; i < count; i++)
- {
- sb.AppendLine("" + sf1.Number[i]);
- }
- System.Console.Out.Write(sb.ToString());
- System.Console.Out.WriteLine("");
- System.Console.Out.WriteLine("用时:" + ((sf1.EndDateTime.Ticks - sf1.StartDateTime.Ticks) / 10000) + "毫秒");
- }
- }
复制代码 以上代码100000以内0.7秒左右,1000000以内大约40秒……嘛嘛……什么时间的无视好了,反正速度和机器好坏有关。
第一层循环的方法还可以继续优化,通过更快的算法可以找出有质数嫌疑的数字然后再去判断,这样计算效率会更高,明天再来研究看看吧,一天都没睡觉了,现在头昏脑胀的…… |
|