c#如何在范围内找到数字位置

c#如何在范围内找到数字位置,c#,numbers,position,range,C#,Numbers,Position,Range,例如,我找到了从2到100的素数。我需要知道哪个号码在位置上,比如说24号。你能帮我找到最简单的方法吗 using System; using System.Collections.Generic; class SomePrimesRange { static void Main() { for (int i = 2; i < 260; i++) { if (i % 2 == 0) {

例如,我找到了从2到100的素数。我需要知道哪个号码在位置上,比如说24号。你能帮我找到最简单的方法吗

using System;
using System.Collections.Generic;

class SomePrimesRange
{
    static void Main()
    {

        for (int i = 2; i < 260; i++)
        {
            if (i % 2 == 0)
            {

            }
            else if (i % i == 0)
            {
                Console.WriteLine(i);
            }
            List<int> numbers = new List<int>(260);
            numbers.Add(i);
            foreach (int a in numbers)
            {
                Console.WriteLine("Enter a position:");
                int position = int.Parse(Console.ReadLine());
                Console.WriteLine(position);
            }
        }
    }
}
使用系统;
使用System.Collections.Generic;
类SomePrimesRange
{
静态void Main()
{
对于(int i=2;i<260;i++)
{
如果(i%2==0)
{
}
else if(i%i==0)
{
控制台写入线(i);
}
列表编号=新列表(260);
增加(i);
foreach(整数为int a)
{
Console.WriteLine(“输入位置:”);
int position=int.Parse(Console.ReadLine());
控制台写入线(位置);
}
}
}
}

首先,我假设您不想要一个简单的解决方案,因为这将是暴力,并将导致缓慢的未优化代码

我不打算为您编写代码,但我将解释背后的理论,并为您提供一些伪代码

func findPrimeNumber(int n){
  primeArray = []
  int number = 1

  while(primeArray.length < n){
    if(isNumberPrime(number) == true){
      primeArray.append(number, primeArray)
    }
    number++
  }
}

func isNumberPrime(int number, int[] primeArray){
  var minCheck = Math.roundUp(Math.sqrt(number))
  foreach prime in primeArray{
    if(prime <= minCheck && prime > 1){
     if(number % prime != 0){
       //keep checking numbers
     }else{
       return false  
     }
    }else{
      break; //no more checking is necessary
    }
    return true;
  }
}
func findPrimeNumber(int n){
primeArray=[]
整数=1
while(primeArray.length
我在上面的伪代码中实现了两个基本概念(您可能需要增强边缘情况的代码)

运行一个简单地通过检查2…n-1来确定一个数字是否为素数的算法是无效的,也是浪费的

  • 您只需将数字检查到您的数字的平方根,您的检查问题就可以四舍五入。例如,要确定16是否为素数,只需检查2、3、4是否为素数。(以2和4的形式回答是肯定的)
  • 17岁怎么样?2,3,4,5是不可除的,17是素数

  • 你只需要检查基本因子。用非素数除以一个数来检查一个数是否为素数是没有意义的,因为每个非素数最终都是由素数组成的。所以你只需要检查小于平方根的素数因子
  • 就确定第24次迭代而言,可能有一个比我的更智能的动态规划解决方案,但我只是线性查找前24个素数,但优化查找过程,以便快速查找


    如果你需要更多的帮助,请告诉我。祝你好运,有趣的小问题。

    做一个foreach循环。将数字添加到列表中。然后获取数组中的第24项。项[23](不是项[24],因为数组从0开始)

    这是用于此的代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace PrimeNumberHelp
    {
        class Program
        {
    
            private static int Max = 100;
            static void Main(string[] args)
            {
                List<int> Primes = new List<int>();
                int current = 0;
                while (current <= 100)
                {
                    if (IsPrime(current))
                        Primes.Add(current);
                    current++;
                }
                Console.WriteLine(Primes[23]);
                Console.ReadKey();
            }
    
            private static bool IsPrime(int number)
            {
                if (number == 1)
                    return false;
                if (number == 2)
                    return true;
    
                if (number % 2 == 0)
                    return false;
    
                for (int i = 3; i * i <= number; i += 2)
                {
                    if (number % i == 0)
                        return false;
                }
                return true;
            }
        }
    }
    
    使用系统;
    使用System.Collections.Generic;
    使用System.Linq;
    使用系统文本;
    名称空间PrimeNumberHelp
    {
    班级计划
    {
    私有静态int Max=100;
    静态void Main(字符串[]参数)
    {
    列表素数=新列表();
    int电流=0;
    
    虽然(当前
    你能帮我找到最简单的方法吗?
    当然,只要展示你的艰难之路,我们就可以开始工作。嗨!我已经尝试过这样做:[这是我迄今为止的艰难之路]:(我做得非常错误。你能帮我一点吗?我是C#的新手,我想这样做可以做到:[但没有:(@TsenkoAleksiev)这有帮助吗?如果有,请选择这个作为答案。@John Thompson这有帮助吗?