C#新人求问怎么写计算100以内的素数的和

qq_37108324 2016-12-19 09:19:01
刚学c#求问:怎么写计算100以内的素数的和,求各位大神教教
...全文
1662 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
mycsdnlook 2018-10-11
  • 打赏
  • 举报
回复
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();
}
}
}
E次奥 2018-09-13
  • 打赏
  • 举报
回复
错了,先把2输出,然后从3开始,每次步长2;
E次奥 2018-09-13
  • 打赏
  • 举报
回复
首先最小的质数是2 ,然后大于2的所有质数都是奇数! 所以循环可以从2开始 , 步长 i+=2;
VillanelleZ 2018-09-12
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:
对于一个有过编程经验的人(不管你学习了什么语言),“计算100以内的素数的和”这并不是目的,重点是了解你的数学(具体地说是“数论”)的基础知识。如果你体现出全部精力纠结于编程代码,那么你实际上就反向地体现出没有数学基础。


听君一席话胜读十年书,自己真的是浑浑噩噩地在面试,谢谢大神
  • 打赏
  • 举报
回复
以前写过,简单的循环易于初学者阅读,:
        //列出所有素数和素数总和
        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();
        }
threenewbee 2016-12-20
  • 打赏
  • 举报
回复
引用 2 楼 shingoscar 的回复:
[quote=引用 1 楼 caozhy 的回复:] for (int i = 2; i < n; i++) if (n % 2 == 0) return false;
[/quote] i % n,不是i % 2,写错了,谢谢提醒
风吹腚腚凉 2016-12-20
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
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); }
这个是求单数!
xuzuning 2016-12-20
  • 打赏
  • 举报
回复
        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];
            }
        }
  • 打赏
  • 举报
回复
有了素数列表,自然也很容易判断“是否是素数”。可以修改一下
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);
    }
}
这里的关键是产生素数表的实例化方法。
  • 打赏
  • 举报
回复
对于一个有过编程经验的人(不管你学习了什么语言),“计算100以内的素数的和”这并不是目的,重点是了解你的数学(具体地说是“数论”)的基础知识。如果你体现出全部精力纠结于编程代码,那么你实际上就反向地体现出没有数学基础。
  • 打赏
  • 举报
回复
可以使用“筛选法”来计算素数列表。
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();
如果是面试,那么要考察的不是肤浅的皮毛,而是考察一个人深度的“背景”知识。而面试的目的不会轻易告诉你,更不会随便写到什么“面试宝典”上去。通常出的问题都是肤浅的,就是看你这个人本身是否能够主动把问题想得深入一些(当然是在不耽误时间的情况下)。
Poopaye 2016-12-19
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
for (int i = 2; i < n; i++) if (n % 2 == 0) return false;
threenewbee 2016-12-19
  • 打赏
  • 举报
回复
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); }

110,536

社区成员

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

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

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