传递一个参数a,返回1到a之间素数的个数。素数即质数public int Fun(int a)
{
bool bl = true;
int count = 0;
for (int i = 1; i <= a; i++)
{
for (int j = 2; j < i; j++)
{
if (i % j == 0)
{
bl = false;
break;
}
}
if (bl)
{
count++;
} }
return count;
}
这是我写的一个方法,但结果错了,大家帮忙找下错误
{
bool bl = true;
int count = 0;
for (int i = 1; i <= a; i++)
{
for (int j = 2; j < i; j++)
{
if (i % j == 0)
{
bl = false;
break;
}
}
if (bl)
{
count++;
} }
return count;
}
这是我写的一个方法,但结果错了,大家帮忙找下错误
{
count++;
}
改成if(bl=true)
{
count++;
}
试试看..
* 最普通的算法:
* 打印num以内的素数并返回素数个数
* n、m分别为外、内层循环,i是第几个素数,s是素数个数
*/
public int prime(int num){
int n,m,i=0,s=0;
label1:
for(n=2;n<=num;n++)
{
for(m=2;m<=n/2;m++)
{
if(n%m==0)
continue label1;
}
s++;
i++;
Console.WriteLine("第{0}个素数是:{1}",i,n);
}
return s;
}
static void Main(string[] args)
{
foreach (int n in GetSH(1,100))
{
Console.WriteLine(n);
}
Console.ReadKey();
}public static int[] GetSH(int min, int max)
{
List<int> result = new List<int>();
int flag = 1;
for (int i = min; i <= max; i++)
{
for (int j = 2; j <= Math.Sqrt(i); j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag == 1) result.Add(i);
flag = 1;
}
return result.ToArray();
}
每次判断完成以后你都要把bl置成true啊。
而且计算素数的最优算法不是这样的,建议看下大学c语言教科书。里面有示例程序。
把你那段代码改下。
public int Fun(int a)
{
bool bl = true;
int count = 0;
for (int i = 1; i <= a; i++)
{
bl = true;
for (int j = 2; j < i; j++)
{
if (i % j == 0)
{
bl = false;
break;
}
}
if (bl)
{
count++;
} }
return count;
}
public int Fun(int a)
{
bool bl = true;
int count = 0;
for (int i = 1; i <= a; i++)
{
bl = true;
for (int j = 2; j < i; j++)
{
if (i % j == 0)
{
bl = false;
break;
}
if (bl)
{
count++;
} } } return count;
}