![]() |
![]() |
#1 |
"Tilman Neumann"
Jan 2016
Germany
3·179 Posts |
![]()
Hi,
reading http://www.karlin.mff.cuni.cz/~krypt.../main_file.pdf let me investigate using the polynomial Q2(x) = (2ax + b)^2 - kN instead of the usual Q(x) = (ax + b)^2 - kN for SIQS. Regarding performance, I found that the output of the Knuth-Schroeppel algorithm is decisive: If it finds some k with kN == 1 (mod 8) then Q2(x) is faster; otherwise Q(x) is the better choice. The difference in each case may be about 5-10%. Are there more papers looking at Q2(x)? Is or was anybody else using case distinctions on kN (mod 8) that improve SIQS (or maybe MPQS) performance? |
![]() |
![]() |
![]() |
#2 |
Tribal Bullet
Oct 2004
2×1,789 Posts |
![]()
Every prime factor that is in the A value of a chosen QA polynomial yields one sieving root, whereas primes in the factor base always have two sieving roots. So sieving will be faster if the factors of A are not very small.
That's separate from the choice of multiplier k. Some implementations force kN==1 mod 8 but ultimately the factor base will have many primes, and luck of the draw could point to a different as better. My small SIQS code here sorts the choice of multipliers by the value of kN mod {8,3,5} to reduce the number of multipliers to try while still maximizing the chance of picking an optimal one. |
![]() |
![]() |
![]() |
#3 | |
"Tilman Neumann"
Jan 2016
Germany
3·179 Posts |
![]()
Hi Jason,
Quote:
Maybe you didn't spot the little subtlety with the 2 in Q2(x) = (2ax+b)^2 - kN ? The point here is that under certain conditions, Q2(x) is divisible by 4a "by design", while Q(x) = (ax+b)^2 - kN is only divisible by a. Although the a-parameter of Q2(x) must be chosen 1 bit smaller than in Q(x) to get polynomial values in the same bounds, the part of polynomial values that must be checked for smoothness, Q2(x)/(4a) vs. Q(x)/a, is one bit smaller in Q2(x). Furthermore Q2 has 2 bit more that can be removed very fast in trial division / resieving. The conditions that guarantee that Q2(x) is divisible by 4a are: * we need k with kN == 1 (mod 8) * the b-parameter must be odd We can still use Q2(x) if these conditions are not met, but then its "1-2 bit advantage" is gone. My performance test result was that Q2(x) is indeed faster than Q(x) if and only if the Knuth-Schroeppel algorithm (following Pomerance "The Quadratic Sieve Factoring Algorithm") gives us some k with kN == 1 (mod 8). If the Knuth-Schroeppel algorithm gives us some k with kN == 3, 5, 7 (mod 8), then using Q2(x) will be slower, no matter if we use that k or the "best" k with kN == 1 (mod 8). |
|
![]() |
![]() |
![]() |
#4 | |
Just call me Henry
"David"
Sep 2007
Liverpool (GMT/BST)
22·1,553 Posts |
![]() Quote:
|
|
![]() |
![]() |
![]() |
#5 | |
"Tilman Neumann"
Jan 2016
Germany
10318 Posts |
![]() Quote:
On average, using Q2(x) is faster than Q(x) if the Knuth-Schroeppel algorithm (following Pomerance "The Quadratic Sieve Factoring Algorithm") gives us some k with kN == 1 (mod 8). If the Knuth-Schroeppel algorithm gives us some k with kN == 3, 5, 7 (mod 8), then using Q2(x) will usually be slower, (no matter if we use that k or the "best" k with kN == 1 (mod 8). ) |
|
![]() |
![]() |
![]() |
#6 |
"Tilman Neumann"
Jan 2016
Germany
10000110012 Posts |
![]() |
![]() |
![]() |
![]() |
#7 |
"Ben"
Feb 2007
377410 Posts |
![]()
I finally got around to implementing Q2(x) polynomials and tuning the KS multiplier selection and I'm quite happy with the results.
As one test case I generated 100 random rsa semiprimes. Of the 100, 85 used kN==1 mod 8 and were about 10% faster on average. Rarely (3 times out of 100) it seems to be a little overzealous trying to get kN == 1 mod 8 and will pick a slightly worse multiplier for 4-5% slowdown or so. But overall, quite an improvement in my view. Many thanks Till! |
![]() |
![]() |
![]() |
#8 |
Nov 2005
2×5×11 Posts |
![]()
When we only pick odd numbers on the left by taking
q(x) = (2x+b)^2 - k*n We can expect a factor of 4 on the right i.e. q(x) = 0 mod 4, as long as k*n is odd. But kn = 1 mod 8 gives an extra factor 2 if b is odd (2x+b)^2 - k*n = (2x+b)^2 - 1 = 4x^2 + 4bx + b^2 - 1 = 4x^2 + 4bx (mod 8) Since b^2 = 1 mod 8 for odd b And such (2x+b)^2 - k*n = 4x^2 + 4bx = 4x (x + b) (mod 8) Since either x or x+b are even we know (2x+b)^2 - k*n = 0 mod 8 I remember that when playing with the QS in some cases of k and n q(x) has many 2 in its prime factors. There also was a kind of a structure in it, which works nicely with sieving. But for some n there is no k to get many 2's on the right side. I was not able to come up with some approach using this nice feature. Last fiddled with by ThiloHarich on 2021-08-04 at 12:42 |
![]() |
![]() |
![]() |
#9 | |
"Tilman Neumann"
Jan 2016
Germany
21916 Posts |
![]() Quote:
Yes, it does not work on all numbers but on most of them. Your results look similar to mine. I estimated the "benalty" for kN == 1 (mod 8) from a scatter plot of f(k1)-f(k*) vs. runtime(k1)-runtime(k*), where k1 is the best k with kN == 1 (mod 8) and k* is the best k with kN == 3, 5, 7 (mod 8). Do you still get convincing kN == 2 (mod 8) ? That looked like a 50-50 case to me, so I still do not consider them. Last fiddled with by Till on 2021-08-04 at 13:58 Reason: parentheses |
|
![]() |
![]() |
![]() |
#10 | |
"Ben"
Feb 2007
72768 Posts |
![]() Quote:
1) a C60 where the k=2, kn==2 mod 8 case was 15% faster than kn==1 mod 8 (with k=1) 2) a C78 where the k=2, kn==6 mod 8 case was 5% slower than kn==1 mod 8 (with k=203) In any case the k=2 multiplier is rarely used. Both of the above examples were the only ones out of 100 samples at those sizes. |
|
![]() |
![]() |
![]() |
#11 |
"Tilman Neumann"
Jan 2016
Germany
3×179 Posts |
![]() |
![]() |
![]() |
![]() |
Thread Tools | |
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
GCD of Polynomials over a finite field for NFS | paul0 | Programming | 6 | 2015-01-16 15:12 |
SNFS polynomials. | chris2be8 | FactorDB | 1 | 2012-03-10 16:49 |
orthogonal polynomials | yemsy | Aliquot Sequences | 1 | 2011-02-17 10:25 |
SNFS polynomials for k*b^n+-1 | mdettweiler | Factoring | 15 | 2010-01-14 21:13 |
Polynomials and Probability | Orgasmic Troll | Puzzles | 4 | 2003-09-16 16:23 |