刚学c#求问:怎么写计算100以内的素数的和,求各位大神教教
解决方案 »
- DGV 那个滚动条 为什么拉不到最下面呢
- 两个同名函数,只有返回值类型不同,可以重载吗?按理说,可以重载呀,因为返回值类型也是“函数签名”的一部分呀?
- 求winform下Ibatis框架配置
- 读XML文档少一条记录
- 如何把byte转换成double或float型数据
- 用c#建立的“Web控制項程序庫”程序怎樣調用com組件?郁悶我很久了!!!幫幫忙!
- 如何在C#中调用并执行其它程序!
- 困惑!
- Visual Studio .NET里怎么改变菜单的大小???
- 用vs.net怎么发布c#的应用程序??
- C#2008 调用一个dll后,调试出现错误“不是有效的 Win32 应用程序”
- 已知圆心坐标和半径如何用wpf计算圆周上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);
}
{
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();如果是面试,那么要考察的不是肤浅的皮毛,而是考察一个人深度的“背景”知识。而面试的目的不会轻易告诉你,更不会随便写到什么“面试宝典”上去。通常出的问题都是肤浅的,就是看你这个人本身是否能够主动把问题想得深入一些(当然是在不耽误时间的情况下)。
{
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);
}
}
这里的关键是产生素数表的实例化方法。
{
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];
}
}
i % n,不是i % 2,写错了,谢谢提醒
//列出所有素数和素数总和
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();
}
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();
}
}
}