//用方法来实现:计算1-100之间的所有质数(素数)的和。
int sum = GetPrimeSum();
Console.WriteLine(sum);
Console.ReadKey();
}
/// <summary>
/// 判断一个整数是不是质数
/// </summary>
/// <param name="n"></param>
/// <returns></returns>
public static bool IsPrime(int n)
{
bool b = true;
if (n < 2)
{
b = false;
}
else
{
for (int i = 2; i <= n - 1; i++)
{
if (n % i == 0)
{
b = false;
break;
}
}
}
return b;
}
public static int GetZhiSum()
{
int sum = 0;
for (int i = 1; i <= 100; i++)
{
if (IsPrime(i))
{
sum += i;
}
}
return sum;
}作者: 佟嘉豪 时间: 2013-11-3 00:13
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 sum=0;//总和
for (int i = 0; i < 100; i++)
{
if (IsPrime(i))
{
sum += i;
}
}
Console.WriteLine(sum);
}
public static bool IsPrime(int number)//判断一个数是否是质数
{
if (number < 2)//小于2 不是素数
{
return false;
}
else if (number == 2)//等于2是素数
{
return true;
}
else
{
for (int i = 2; i < number; i++)//大于2 进行判断
{
if (number % i == 0)
{
return false;
}
}
return true;
}
}
}
} 作者: hourglass 时间: 2013-11-3 02:43
楼上两位已经把代码贴出来了, 处理这个100内的素数之和是没问题的。
不过如果想优化一下的话, 还是有一个点可以优化的。
在判断某一个数是否为素数的时候, 楼上两位都判断到n-1了(n为需要判断的数字), 实际上只需要判断到n/2 - 1就可以了。作者: 大虾挂了 时间: 2013-11-3 05:09 本帖最后由 大虾挂了 于 2013-11-3 05:11 编辑
这是用我上面说的思路写的代码作者: 自由の风 时间: 2013-11-3 09:10
class Program
{
static void Main(string[] args)
{
int sum = 0;
for (int i = 2; i <= 100; i++)//因为1不为质数,所以从i从2开始,到100结束,规避了1
{
for (int j = 2; j <= i; j++)//j与每次提出来的i进行计算,j从头到尾只能是i的最小值到当前要计算的i的值
{
if (i % j == 0 && i != j)//质数的判断,如果i与从小到大的j整除,并且i不等于j(规避了1),只要有一次满足上边的条件,就能说明i必然不是质数就没必要
//继续整除了,试下一个i就行
{
break;
}
else if (i == j) //在判断上边的条件同时(不能是否则,会重复输出)判断下面的条件,显然无论多少次循环只可能有一次满足条件,就是当ij相除所有数都不满足上 // 面的条件,到了
//循环最后因为循环条件而结束时,ij必然相等(就是循环结束的条件),这时候的i肯定就是质数了
sum = sum + j;
}
}
Console.WriteLine("sum="+sum);
Console.ReadKey();
}
}
穷举法最简单,和是1060作者: 凤凰涅槃 时间: 2013-11-3 09:57
楼上已经写的很好了,因为之前看C语言视频的时候,浙江大学的一个老师讲了一个判断素数的方法,自己觉得比较巧妙吧,想和大家分享一下。
//求1--100之间所有素数的和
//质数,又称素数,指在一个大于1的自然数中,除了1和此整数自身外,
// 无法被其他自然数整除的数
int sum = 0;
for (int i = 2; i <= 100; i++) //循环从2开始,1不是素数,
{
int m = (int)Math.Sqrt(i); //这样效率稍微高点
int k;
for (k = 2; k <= m; k++)
{
if (i % k == 0) break;
}
//通过结束循环的方式判断是否是素数
if (k > m) sum = sum + i;
}
Console.WriteLine(sum);
Console.ReadKey();
class Program
{
static void Main(string[] args)
{
int sum = 0;
for (int i = 1; i < 100; i++)
{
if (IsPrime(i) == true) //是否为素数
{
sum = sum + i;
Console.WriteLine(i);
}
}
Console.WriteLine("计算1-100之间的所有质数(素数)的和为:{0}",sum);
Console.ReadKey();
}
static bool IsPrime(int n)
{
if (n <= 1) return false;
if (n == 2) return true; //直接判断
for (int i = 2; i < n / 2; i++)
{
if (n % i == 0) return false;
}
return true;
}
}
class Program
{
static void Main(string[] args)
{
int sum = 0;//声明一个变量,求和
for(int i=1;i<=100;i++)
{
if (isZhiShu(i)) //调用判断i是不是质素的方法
{
sum += i;
}
}
Console.WriteLine("1到100之间的素数的和为:"+sum);
Console.ReadKey();
}
/// <summary>
/// 判断是不是素数的方法
/// </summary>
/// <param name="n"></param>
/// <returns></returns>
static bool isZhiShu(int n)
{
if (n < 2)
{
return false;
}
for (int i = 2; i < (n / 2) + 1; i++)
{
if (n % i == 0)
{
return false;
}
}
return true;
}
}作者: 凌晨丶草未眠 时间: 2013-11-3 22:20