이것은 꽤 '수학 - y'이지만 프로젝트 오일러 문제이기 때문에 여기에 게시하고 있습니다. & 코드에 버그가있을 가능성이 있습니다.소수 또는 최하위 반복주기 - 버그 또는 오해?
질문 : Determing longest repeating cycle in a decimal expansion은 로그를 사용하여 문제를 해결하지만 단순한 무차별 대항력으로 해결하는 데 관심이 있습니다. 좀 더 정확히 말하자면, 왜 알고리즘과 코드가 올바른 솔루션을 반환하지 않는지 이해하는 데 관심이 있습니다.
알고리즘은 간단
- 각 단계 레코드에 제수 및 나머지 제수/나머지 튜플이 반복
- 를는 '나눗셈'
- 복제, 소수 유추 표현이 반복됩니다.
private int numerator; private int recurrence; private int result; private int resultRecurrence; private List<dynamic> digits;
을 요청하고 여기에 코드로
여기, 개인 필드입니다 :
private void Go()
{
foreach (var i in primes)
{
digits = new List<dynamic>();
numerator = 1;
recurrence = 0;
while (numerator != 0)
{
numerator *= 10;
// quotient
var q = numerator/i;
// remainder
var r = numerator % i;
digits.Add(new { Divisor = q, Remainder = r });
// if we've found a repetition then break out
var m = digits.Where(p => p.Divisor == q && p.Remainder == r).ToList();
if (m.Count > 1)
{
recurrence = digits.LastIndexOf(m[0]) - digits.IndexOf(m[0]);
break;
}
numerator = r;
}
if (recurrence > resultRecurrence)
{
resultRecurrence = recurrence;
result = i;
}
}}
하는 정수 < 10 < (20) 내가 올바른 결과를 얻을 테스트; 그리고 정확하게 i
의 값을 식별합니다. 그러나 나가 얻는 십진법 represetation는 부정확하다 - 나는 정확한 결과가 멀리 더 적은이 (i-250
같이 무언가가 반면) i-1
를 산출한다.
아마 내가 프로그래밍 버그 - 찾을 수없는 - 또는 논리 버그가 있습니다.
p-1 요소가있는 multiplicative group over p과 같은 느낌이 들기 때문에 혼란 스럽습니다. 나는 누군가가 제안을 할 수 있는지, 나는 무엇인가 놓치고 있다고 확신한다?
편집
내 소수 코드를 포함하지 않을거야 - 내가 제대로 (가 983이다 메모리에서) i
의 값을 식별 위에 내가 설명대로 관련 아니지만 나는 데 resultRecurrence
에 대한 올바른 값을 얻는 데 문제가 있습니다.
코드를 작성한 언어를 알려주십시오. 나는 그것이 자바 스크립트라고 생각하고 그럴 수 없다는 것을 깨달았다. –
@Phil - C# 태그 추가 - C#의 특정 질문이 아니지만 태그가 속한 것 같습니다. –
변수'primes','digits','numerator','recurrence','resultRecurrence' 및'result'가 선언 된 전체 코드를 게시 할 수 있습니까? 메소드에 대한 매개 변수 인 경우 메소드 서명뿐만 아니라 메소드 서명을 표시하십시오. –