I hope this meets your needs-- I started from scratch, rather than using your nodes as a base. I'll explain as I go along.
We'll start with the file and the overview:
So, first, I figured you're not concerned with topology here (other than no zero area faces, etc) since you're 3D printing. And, for the same reason, more vertices are probably preferable to fewer vertices. Because I wasn't entirely sure which angles you wanted to adjust, I just made controls for every possible parameter.
We're starting by making a solidifed cylinder via the use of curves:
Notice that what I'm doing here, by using a profile with a resolution of 4, is creating a square cross section for a circle. (I need to rotate it 45 degrees just because of the default orientation of a GN circle.)
I'm also capturing quite a few attributes. I'm capturing the index of my cross-section, an integer between 0 and 3 inclusive, so I can refer to particular parts of the geometry later. And I'm capturing the spline factor, which is a number ranging from 0-1 that is, here, just the remapped angle-- I can use this as a sort of polar coordinate for later manipulations.
Here's the first thing that I'm doing with them:
I'm using the captured spline factor to create a triangle wave along the curve via modulo math; the value of the modulo depends on how many teeth I want. Then, I'm just moving the top vertices, identified by the indices of the cross-section, up.
Note that the sharpness of this angle is fully determined by the count and the height of the sawtooth wave. (Really, all of those parameters are fully determined by any two of them.) I'm using Count and height ("Sharpness") to define that here. If we'd like, we could instead reverse-engineer the height we need for a particular angle (within bounds), using a bit of trigonometry, but it makes it more complicated, and you don't seem to need particular angles, just to be able to tune to eye, so height seems fine.
Because I wasn't entirely certain whether the "sharpness" of the teeth that want controlling refers to the angle of the sawtooth or whether you want flat sections as you have on some of your pictures, I've also created "plateau" controls, by clamping the height of sawtooth to a particular value with a mix node and a math/minimum node.
The indices of the cross-section are useful for other controls as well. We've already moved the cutting section on the basis of these indices; I can also control the height of the bottom, which is just the inverted selection. Finally, I can control what I call the "shear" of the blades, by moving a different cross-section selection:
Index 2 is the top inside of our cylinder. By moving this up or down, we can change a different angle (which might have been an angle you were interested in-- like I said, I wasn't quite sure from the question.)
You might wonder how I knew which cross-section indices were which. I didn't! But there's only four of them, so I just tried each one to see which it was.
I've also provided controls for radius, thickness, and resolution, which should be fairly self-explanatory. Note that the radius here refers to the circle running through the center; the outer radius is radius + (0.5 * thickness); the outer diameter is thickness + 2 * radius.