我目前正在尝试创建一个程序,仅使用for,do while和ifs打印从0到10,000的素数。我创建了这个程序,但它没有运行
static void Main(string[] args)
{
for (int x = 2; x < 10000; x++)
{
for (int y = 1; y < x; y++)
{
if (x % y != 0)
{
Console.WriteLine(x);
}
}
Console.ReadKey();
}
我不知道问题在哪里以及内部是否重置。
答案 0 :(得分:3)
尝试使用bool
变量!!!:
static void Main(string[] args)
{
for (int x = 2; x < 10000; x++)
{
int isPrime = 0;
for (int y = 1; y < x; y++)
{
if (x % y == 0)
isPrime++;
if(isPrime == 2) break;
}
if(isPrime != 2)
Console.WriteLine(x);
isPrime = 0;
}
Console.ReadKey();
}
检查Console.ReadKey();
它应该在上for
循环之后,你甚至可以用for
来改变上<=
战利品的条件,因为10000
还需要检查prime
条件。
答案 1 :(得分:3)
以下是打印0到10000之间的素数的有效方法
using System.IO;
using System;
class Program
{
static void Main()
{
Console.WriteLine("Below are prime numbers between 0 and 10000!");
Console.WriteLine(2);
for(int i=3;i<=10000;i++)
{
bool isPrime=true;
for(int j=2;j<=Math.Sqrt(i);j++)
{
if(i%j==0)
{
isPrime=false;
break;
}
}
if(isPrime)
{
Console.WriteLine(i);
}
}
}
}
答案 2 :(得分:2)
第一个问题是x % 1
总是为零,至少对于非零x
。你需要在一个开始测试(内部)循环,为了提高效率,当你超过数字本身的平方根时停止 - 如果n
有一个因子f
其中{{ 1}},您已经找到了因子f > sqrt(n)
。
第二个问题是,每当余数为非零时,您将写出候选编号。因此,因为n / f
是3,所以尽管十五是非素数,但它将被输出。它还会在15 % 4
,15 % 2
,15 % 4
,15 % 6
等处输出。
主要测试的正常(天真)算法是:
15 % 7
答案 3 :(得分:2)
你有没有理由把Console.ReadKey();循环内部?
除非在循环过程中按键,否则你应该把它放在循环之外。
static void Main(string[] args)
{
for (int x = 2; x < 10000; x++)
{
for (int y = 1; y < x; y++)
{
if (x % y != 0)
{
Console.WriteLine(x);
}
}
}
Console.ReadKey();
}
可能那段代码只是打印很多x。 你应该解决它。
答案 4 :(得分:0)
以下是打印Prime No的任何上限的简单逻辑。
输入:10输出:2,3,5,7
var array = [2, 5, 9];
array.splice(array.findIndex(x => x==5), 1);
答案 5 :(得分:0)
这是我的代码,您可以在其中生成和打印两个数字之间的质数(在string_starting_number和string_last_number之间)。 string_starting_number的最小可能值为0,string_last_number的最大可能值为十进制。MaxValue-1= 79228162514264337537543950334而不是79228162514264337593543950950335,而不是79228162514264337593543950950335,因为在FOR循环中使用了decimal_a ++命令,这会导致溢出错误。
请注意,您应该在string_starting_number和string_last_number中以字符串类型输入值。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace GeneratingPrimeNumbers
{
class Program
{
static void Main(string[] args)
{
string string_starting_number = "1"; //input here your choice of starting number
string string_last_number = "10"; //input here your choice of last number
decimal decimal_starting_number = Convert.ToDecimal(string_starting_number);
decimal decimal_last_number = Convert.ToDecimal(string_last_number);
string primenumbers = "";
ulong ulong_b;
ulong ulong_c;
if (decimal_starting_number <= ulong.MaxValue)
{
ulong ulong_starting_number = Convert.ToUInt64(decimal_starting_number);
ulong ulong_last_number;
if (decimal_last_number > ulong.MaxValue)
{
ulong_last_number = ulong.MaxValue;
}
else
{
ulong_last_number = Convert.ToUInt64(decimal_last_number);
}
if (ulong_starting_number == 0 || ulong_starting_number == 1 || ulong_starting_number == 2 || ulong_starting_number == 3)
{
primenumbers = 2 + " " + 3;
ulong_starting_number = 5;
}
if (ulong_starting_number % 2 == 0)
{
ulong_starting_number++;
}
ulong ulong_a;
for (ulong_a = ulong_starting_number; ulong_a <= ulong_last_number; ulong_a += 2)
{
ulong_b = Convert.ToUInt64(Math.Ceiling(Math.Sqrt(ulong_a)));
for (ulong_c = 3; ulong_c <= ulong_b; ulong_c += 2)
{
if (ulong_a % ulong_c == 0)
{
goto next_value_of_ulong_a;
}
}
primenumbers = primenumbers + " " + ulong_a;
next_value_of_ulong_a:
{
}
}
}
if (decimal_last_number > ulong.MaxValue)
{
string ulong_maximum_value_plus_two = "18446744073709551617";
if (decimal_starting_number <= ulong.MaxValue)
{
decimal_starting_number = Convert.ToDecimal(ulong_maximum_value_plus_two);
}
if (decimal_starting_number % 2 == 0)
{
decimal_starting_number++;
}
decimal decimal_a;
for (decimal_a = decimal_starting_number; decimal_a <= decimal_last_number; decimal_a += 2)
{
ulong_b = Convert.ToUInt64(Math.Ceiling(Math.Sqrt(ulong.MaxValue) * Math.Sqrt(Convert.ToDouble(decimal_a / ulong.MaxValue))));
for (ulong_c = 3; ulong_c <= ulong_b; ulong_c += 2)
{
if (decimal_a % ulong_c == 0)
{
goto next_value_of_decimal_a;
}
}
primenumbers = primenumbers + " " + decimal_a;
next_value_of_decimal_a:
{
}
}
}
Console.WriteLine(primenumbers);
Console.ReadKey();
}
}
}