刚学c#求问:怎么写计算100以内的素数的和,求各位大神教教

解决方案 »

  1.   

    bool isp(int n)
    {
    if (n == 2) return true;
    for (int i = 2; i < n; i++) if (n % 2 == 0) return false;
    return true;
    }
    void main()
    {
    int sum = 0;
    for (int i = 2; i <= 100; i++) if (isp(i)) sum += i;
    Console.WriteLine(sum);
    }
      

  2.   

    可以使用“筛选法”来计算素数列表。public class 素数筛选法
    {
        private List<int> nums = new List<int>();    public 素数筛选法(int max)
        {
            var n = new bool[max];
            for (var i = 2; i < max / 2; ++i)
                if (!n[i])      //如果为false表示是素数
                    for (var j = i + i; j < max; j += i)    //筛选掉前一个素数的倍数的所有数字,对应位置设置为true
                        n[j] = true;
            for (var i = 1; i < max; ++i)
                if (!n[i])
                    nums.Add(i);
        }    public IEnumerable<int> Numbers()
        {
            foreach (var x in nums)
                yield return x;
        }
    }这样,当你创建一个素数列表对象,你就可以重复使用这个对象(例如放到一个static变量引用它),而不需要在每一次求素数时重复地去进行许多除法计算。你这个问题本身是很简单的,可以写var result = new 素数筛选法(101).Numbers().Sum();如果是面试,那么要考察的不是肤浅的皮毛,而是考察一个人深度的“背景”知识。而面试的目的不会轻易告诉你,更不会随便写到什么“面试宝典”上去。通常出的问题都是肤浅的,就是看你这个人本身是否能够主动把问题想得深入一些(当然是在不耽误时间的情况下)。
      

  3.   

    有了素数列表,自然也很容易判断“是否是素数”。可以修改一下public class 素数筛选法
    {
        private List<int> nums = new List<int>();    public 素数筛选法(int max)
        {
            var n = new bool[max];
            for (var i = 2; i < max / 2; ++i)
                if (!n[i])      //如果为false表示是素数
                    for (var j = i + i; j < max; j += i)    //筛选掉前一个素数的倍数的所有数字,对应位置设置为true
                        n[j] = true;
            for (var i = 1; i < max; ++i)
                if (!n[i])
                    nums.Add(i);
        }    public IEnumerable<int> Numbers()
        {
            foreach (var x in nums)
                yield return x;
        }    public bool 判断素数(int x)
        {
            return nums.Contains(x);
        }
    }
    这里的关键是产生素数表的实例化方法。
      

  4.   

            static void Main(string[] args)
            {
                Console.WriteLine(PrimeNumber(100).Sum());
            }
            static IEnumerable<int> PrimeNumber(int n)
            {
                var a = Enumerable.Range(2, n - 1).ToList();
                for (var i = 0; i < a.Count; i++)
                {
                    a = a.Where(x => (x % a[i]) != 0 || x == a[i]).ToList();
                    yield return a[i];
                }
            }
      

  5.   


    i % n,不是i % 2,写错了,谢谢提醒
      

  6.   

    以前写过,简单的循环易于初学者阅读,:
            //列出所有素数和素数总和
            static void Main(string[] args)
            {
                bool isPrime;   //是否为素数
                int count = 0;  //素数个数
                int sum = 0;    //素数总和
                for (int m = 1; m <= 100; m++)
                {
                    isPrime = true;
                    for (int i = 2; i < m; i++)
                    {
                        if (m % i == 0)
                        {
                            isPrime = false;
                            break;
                        }
                    }
                    if (isPrime == true)
                    {
                        count++;
                        sum += m;
                        Console.Write(m + " ");
                        if (count % 5 == 0)  //每行显示5个
                        {
                            Console.WriteLine();
                        }
                    }
                }
                Console.WriteLine();
                Console.WriteLine("素数总数为:" + count);
                Console.WriteLine("素数总和为:" + sum);            Console.ReadLine();
            }
      

  7.   

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;namespace 练习
    {
        class Program
        {
            static void Main(string[] args)
            {
                int i, j;
                int s = 0;
                for (i = 1; i < 100; i++)
                {
                    for (j = 2; j <= i; j++)
                    {
                        if (i == j)
                        {
                            Console.WriteLine(i);
                            s = s + i;
                        }
                        if (i % j == 0)
                        {
                            break;
                        }
                    }
                }
                Console.WriteLine("100以内素数和为:{0}",s );
                Console.ReadKey();
            }
        }
    }