我認爲這應該更有效,因爲我消除了代碼中的其他循環。我在C#中測試了這個,除了我用硬編碼測試了它。
我認爲這是你想看的代碼。希望它更有效率。我寫在C#中,並沒有質數列表,這樣我就硬編碼(或夠了我的例子)
代碼我想將工作基於把你的代碼
i = 0
while(n > 1)
{
if(n % primes[i] == 0)
{
cout<<primes[i]<<endl;
n /= primes[i];
}
else
i++;
}
代碼我在C#中寫道,我認爲模仿你的代碼或者至少我認爲你在做什麼。
int n = 1806046;
int[] primes;
primes = new int[] { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 439, 601, 733, 941, 1151 };
int i = 0;
while (n > 1)
{
if (n % primes[i] == 0)
{
comboBox1.Items.Add(primes[i]);
n /= primes[i];
}
else
i++;
}
這是我測試的代碼,並以C#爲基礎。哪些工作很好,迭代所有數字,而不是隻有素數。
int x = 1806046;
int i = 2;
while (x > 1)
{
if (x % i++ == 0)
{
x /= --i;
}
}
實際上它是採取幾乎相同的時間。 –
哦,夥計,這需要多快?你也在C編碼? – Timmy
我使用C++,在一個文件中有10^7左右的數字,數字的約束是從1 <= n <= 10^6。約1.5秒內(不考慮打印時間) –