如何将素数检查器实现到我需要计算素数的数组中?

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 &lt;= array.Length 而导致数组索引越界异常,应该是&lt;,而不是&lt;= 就像@LasseV.Karlsen 提到的问题是i &lt;= array.Length, which should be &lt;, and not &lt;= 这是结果 --> "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”也是素数。

以上是关于如何将素数检查器实现到我需要计算素数的数组中?的主要内容,如果未能解决你的问题,请参考以下文章

使用集合计算素数,C++

如何获得两个数字之间的最大素数并将它们存储在数组中?

本机退出代码:-1073741510 (0xc000013a),同时使用素数检查器功能

如何改善此功能以确定素数?

如何计算100以内的所有素数?

如何检查特定整数是不是在列表中