gpt4 book ai didi

c# - 在区间 [1000,9999] 中查找素数的更好解决方案,其中第一个和第二个之和

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:41:11 26 4
gpt4 key购买 nike

我想在区间 [1000,9999] 中查找素数,其中第一位和第二位数字的总和等于数字的第三位和第四位数字的总和。

例如 3517 是质数,3 + 5 = 1 + 7

我的解决方案如下:

for (int i = 1001; i <= 9999; i += 2)
{
if (NumberOfDivisorsOf(i) == 2)
{
string x = i.ToString();
int n1 = Convert.ToInt32(x[0]);
int n2 = Convert.ToInt32(x[1]);
int n3 = Convert.ToInt32(x[2]);
int n4 = Convert.ToInt32(x[3]);

if ((n1 + n2) == (n3 + n4))
Console.WriteLine(i);
}
}

NumberOfDivisorsOf 方法如下所示:

static int NumberOfDivisorsOf(int a)
{
int count = 2;
int i = 2;

for (; i < a/i ; i++)
{
if (a / i * i == a)
count += 2;
}

if (i * i == a)
count++;

return count;
}

我认为 NumberOfDivisorsOf 方法很好,解决方案本身需要改进。

我不想使用 LINQ。我想通过简单的步骤获得它们..


编辑:

根据 OMG 的回答,我改进了代码,如下所示:

for (int i = 1001; i <= 9999; i += 2)
{
if (Isprime(i))
{
int n1 = i / 1000;
int n2 = (i % 1000) / 100;
int n3 = (i % 100) / 10;
int n4 = i % 10;

if ((n1 + n2) == (n3 + n4))
{
Console.WriteLine(i);
}
}
}

我将 NumberOfDivisorOf 方法更改为 IsPrime 方法:

static bool Isprime(int n)
{
if (n == 2)
return true;
if (n == 3)
return true;
if ((n % 2) == 0)
return false;
if (n % 3 == 0)
return false;

int i = 5;
int w = 2;

while (i * i <= n)
{
if (n % i == 0)
return false;

i += w;
w = 6 - w;
}

return true;
}

编辑:

根据 Siye 的回答,我更改了我的代码,如下所示(它使执行速度快了 3 倍)

for (int i = 1001; i <= 9999; i += 2)
{
int n1 = i / 1000;
int n2 = (i % 1000) / 100;
int n3 = (i % 100) / 10;
int n4 = i % 10;

if ((n1 + n2) == (n3 + n4))
{
if (Isprime(i))
{
Console.WriteLine(i);
}
}
}

最佳答案

为了有效地找到质数,有一些很好的解决方案(例如 this )。为了更好地求和,最好在代码中使用 % 或使用 .ToString() 一次,因为它的开销会影响性能大规模。

要使用 %,您可以通过以下方式找到它们:

int n4 = i % 10;
int n3 = (i % 100) / 10;
int n2 = (i % 1000) / 100;
int n1 = (i % 10000) / 1000;

另外,当您发现数字是素数时,最好在循环中使用 break 来使用 is_prime 而不是 NumberOfDivisorsOf

关于c# - 在区间 [1000,9999] 中查找素数的更好解决方案,其中第一个和第二个之和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50667384/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com