我正在编写一个程序来计算Prime因子,我需要下一个素数来查看我的输入数是否可以被整除。素数列表,直到足够大的数字,是已知的。 Example
我的问题是,在我的C#代码中存储前10,000个素数列表并在计算素数因子时使用它是好还是坏?
答案 0 :(得分:1)
您可以存储偏移量:
如果您的素数是:2,3,5,7,11,13,17,19,23,29,31,37,41,43
那么你的偏移量将是(基数= 2):0,1,1,2,2,3,2,4,2,4,6,2,6,4,2 ......
基本上,偏移量只是列表中素数与下一个素数之间的差值。从数学上讲,我不确定这是否真的可以节省太多空间,但值得研究。您很可能使用较小的数据类型来覆盖相同的数字空间。
这是关于"黄金差距"的有趣读物。这表明素数的差异在非常大的素数中保持相对较小:https://en.wikipedia.org/wiki/Prime_gap
如果您只存储10,000个素数,这是毫无意义的。只需存储或计算它们。
答案 1 :(得分:1)
我要做的是创建一个布尔函数,该函数可以返回一个布尔值,具体取决于该值是否为PrimeNumber。
private bool IsPrimeNumber(int value)
{
for(int i = 2; i < value; i++)
{
if(value % i == 0)//If the remainder of "value" divided by "i" is equal to 0.
{
return false;
}
}
return true;
}
然后我会创建一个确定值的所有素因子的函数。
private int[] primefactors(int value)
{
if (value < 0)
{
throw new Exception("Value can't be less than 0.");//Make sure value is not less than 0.
}
List<int> primefactors = new List<int>();
for(int i = 2; i < value; i++)
{
if (value % i == 0 && IsPrimeNumber(i))//If the remainder of "value" divided by "i" is equal to 0 and "i" is a prime number.
{
factors.Add(i);
}
}
return primefactors.ToArray();
}