@shifty:
What kind of “program” are you writing?  What equation/algorithm are you using?
It’s written in BlitzMax. The source below should (hopefully :)) not be too hard to understand - if you have questions, feel free to ask:
' Compares 2nd ed. A&A tech dev cost/rate with Anniv. ed. A&A
' 20 turns to test; record turn number that a total of 2 breakthroughs were achieved.  Test 1 & 2 rolls/turn.
' If two breakthroughs aren't achieved, "turn 0" is recorded (ignored for graphing & turn average)
' (When going for two breakthroughs, two aren't achieved in about 2% for both 2nd and Anniv.)
Strict
Local breakthroughs, totalCost, turn, totalTurns
Local answer[21], prefix$, graph$
Local breakthroughLimit = 2
For Local rolls = 1 To 2 ' actual rolls for 2nd Ed, Researchers for Anniv.
	Print;Print; Print rolls + " Tech Roll(s)/Researcher(s) per Turn:"
	Print; Print "2nd Edition"
	totalCost = 0
	totalTurns = 0
	For Local c = 0 To 20
		answer[c] = 0
	Next
	For Local test = 1 To 100000 ' a hundred thousand tests for accuracy
		breakthroughs = 0
		turn = 0
		While breakthroughs < breakthroughLimit And turn <= 20
			turn :+ 1
			totalCost :+ rolls * 5 ' each roll costs 5 IPCs
			For Local c = 1 To rolls
				If Rand(6) = 6 Then breakthroughs :+ 1
			Next
		Wend
		totalTurns :+ turn
		If turn > 20 Then
			answer[0] :+ 1
		Else
			answer[turn] :+ 1
		EndIf
	Next
	' display results
	For Local c = 1 To 20
		graph = ""
		' divide results by 1000 so each asterisk represents one percent
		For Local cc = 1 To Int(answer[c]/1000.0 + .5)
			graph :+"*"
		Next
		If c < 10 Then prefix = " " Else prefix ="" ' extra space for single digits
		Print prefix + c + " " + graph
	Next
	Print "Avg turn = " + totalTurns / 100000.0
	Print "Avg cost = " + totalCost / 100000.0
	Print; Print "Anniversary Edition"
	totalCost = 0
	totalTurns = 0
	For Local c = 0 To 20
		answer[c] = 0
	Next
	Local researchers ' researchers accumulate from turn to turn
	For Local test = 1 To 100000
		researchers = 0
		breakthroughs = 0
		turn = 0
		While breakthroughs < breakthroughLimit And turn <= 20
			turn :+ 1
			totalCost :+ rolls * 5 ' each researcher costs 5 IPCs
			researchers :+ 1 * rolls ' accumulate 1 researcher per "roll"
			Local success
			For Local c = 1 To researchers
				If Rand(6) = 6 Then success = True ' only one regardless of # of sixes rolled
			Next
			If success Then
				researchers = 0 ' eliminate accumulated researchers when successful
				breakthroughs :+ 1
			EndIf
		Wend
		totalTurns :+ turn
		If turn > 20 Then
			answer[0] :+ 1
		Else
			answer[turn] :+ 1
		EndIf
	Next
	' display results
	For Local c = 1 To 20
		graph = ""
		' divide results by 1000 so each asterisk represents one percent
		For Local cc = 1 To Int(answer[c]/1000.0 + .5)
			graph :+"*"
		Next
		If c < 10 Then prefix = " " Else prefix ="" ' extra space for single digits
		Print prefix + c + " " + graph
	Next
	Print "Avg turn = " + totalTurns / 100000.0
	Print "Avg cost = " + totalCost / 100000.0
Next
I release it into the public domain (modify it as desired/convert it to the language of your choice).  breakthroughLimit is initially set for 2, which generated the first set of graphs in this thread (I hand-rounded the accuracy to a single decimal place when copy/pasting results in the thread). Setting it to 1 (i.e. stopping after getting one breakthrough) produced the second set above. I also made another, slightly tweaked version to generate the “only buy Researchers on turn 1” version for wodan46.