本帖最后由 大虾挂了 于 2013-11-3 06:04 编辑
- using System;
- using System.Collections.Generic;
- namespace 求1_n的所有素数和
- {
- class Program
- {
- static void Main(string[] args)
- {
- //定义一个集合来存放素数,初始状态给集合填入一个2
- List<int> sushu = new List<int>();
- sushu.Add(2);
- Console.WriteLine("请输入一个大于2的数,我们将给出小于等于这个数的所有素数的和");
- int n = Convert.ToInt32(Console.ReadLine());
- //j作为内层循环中,因子检测的sushu集合中的索引.ans用于存储结果
- int j = 0,ans=0;
- for (int i = 3; i < n + 1; i++)
- {
- //一个数的最小因子,最大不会超过这个数开平方,所以这个数开平方即是验证因子的极限
- for (j=0; sushu[j] <= Math.Sqrt(i); j++)
- {
- //如果这个数能整除集合中的某个数,则证明这个数是合数
- if (i % sushu[j] == 0)
- break;
- }
- //如果上面的循环没有通过break跳出,下面的条件必然成立,则意味着这个i是素数、
- //注意,对于3这个素数,根本没有经历过上面循环,这是个特例
- if (sushu[j] > Math.Sqrt(i))
- sushu.Add(i);
- }
- //Console.WriteLine("以下是满足条件的所有素数");
- //foreach (int a in sushu)
- //{
- // Console.Write(a.ToString() + "\t");
- //}
- for (int i = 0; i < sushu.Count; i++)
- {
- ans+=sushu[i];
- }
- Console.Write("小于等于{0}的所有素数的和为:",n.ToString());
- Console.WriteLine(ans);
- Console.ReadKey();
- }
- }
- }
复制代码 这是用我上面说的思路写的代码 |