ฉันกำลังพยายามหาจำนวนตัวหารของจำนวนเต็ม 64 บิต (มากกว่า 32 บิต)
วิธีแรกของฉัน (สำหรับจำนวนน้อย) คือหารตัวเลขจนได้ผลลัพธ์เป็น 1 นับจำนวนเฉพาะที่ตรงกันแล้วใช้สูตร (1 + P1)(1+ P2)..* (1 + Pn) = จำนวนตัวหาร
ตัวอย่างเช่น:
24 = 2 * 2 * 2 * 3 = 2^3 * 3^1
==> (3 + 1)*(1 + 1) = 4 * 2 = 8 ตัวหาร
public static long[] GetPrimeFactor(long number)
{
bool Found = false;
long i = 2;
List<long> Primes = new List<long>();
while (number > 1)
{
if (number % i == 0)
{
number /= i;
Primes.Add(i);
i = 1;
}
i++;
}
return Primes.ToArray();
}
แต่สำหรับจำนวนเต็มมาก วิธีนี้จะต้องใช้การวนซ้ำหลายครั้ง ฉันพบวิธีการที่เรียกว่า Quadratic sieve เพื่อทำการแยกตัวประกอบโดยใช้ ตัวเลขกำลังสอง ตอนนี้การใช้สคริปต์ของฉันอาจง่ายกว่ามากเพราะตัวเลขมีขนาดเล็กกว่ามาก
คำถามของฉันคือ ฉันจะใช้ Quadratic Sieve นี้ได้อย่างไร