如何将素数检查器实现到我需要计算素数的数组中?
Posted
技术标签:
【中文标题】如何将素数检查器实现到我需要计算素数的数组中?【英文标题】:How to implement a prime number checker into an array where i need to count the number of primes? 【发布时间】:2020-09-22 12:08:02 【问题描述】:我有一个包含 20 个数字的数组,我必须计算数组中的素数。我想出了这段代码(它是一个简单的素数检查器),但是当我尝试使用 for
循环将它实现到数组中时,它不起作用。
int primcounter = 0;
for (int i = 0; i <= array.Length; i++)
int divider = 0;
for (int j = 1; j <= array[i]; j++)
if (array[i] % j == 0)
divider++;
else
if (divider == 2)
primcounter++;
Console.WriteLine(primcounter + "Primes are in the array");
目标是测试数组中的每个数字是否为素数,如果是素数,则将primcounter
增加1
。
【问题讨论】:
您的代码的主要检查部分是否工作,隔离? 另外,当你说“不会工作”时,究竟是什么意思?你能发一个minimal reproducible example吗?举例说明输入、输出以及您的预期? "循环它不起作用。"你能解释一下这是什么意思吗? 会不会是因为i <= array.Length
而导致数组索引越界异常,应该是<
,而不是<=
?
就像@LasseV.Karlsen 提到的问题是i <= array.Length, which should be <, and not <=
这是结果 --> "System.IndexOutOfRangeException" :: 数组是基于零的索引。从“0”开始计数
【参考方案1】:
你可以用 linq 实现扩展方法
using System;
using System.Linq;
using System.Collections.Generic;
namespace Test
public static class Math
public static bool IsPrime(this int candidate)
for (int denominator = 2; denominator < candidate - 1; denominator++)
if (candidate % denominator == 0) return false;
return true;
class Program
static void Main(string[] args)
Console.WriteLine(new List<int>()
1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
11, 12, 13, 14, 15, 16, 17, 18, 19, 20
.Where(candidate => candidate.IsPrime()).Count());
Console.ReadKey();
【讨论】:
不幸的是,并不完全正确。根据您的代码,“1”将是素数。什么是阻止某人输入“0”作为候选人?根据您的代码,“0”也是素数。以上是关于如何将素数检查器实现到我需要计算素数的数组中?的主要内容,如果未能解决你的问题,请参考以下文章