Позвольте мне обобщить ваши вопросы на два вопроса:
1) Что конкретно не так с этой программой?
2) Как определить, в чем проблема в программе?
Другие уже ответили на первую часть, но подведем итог:
Задача № 1: Math.Pow использует числа с плавающей запятой двойной точности, которые имеют точность до 15 знаков после запятой. Они не подходят для решения задач, которые требуют совершенной точности, включающей больших целых чисел . Если вы попытаетесь вычислить, скажем, 1000000000000000000 - 1, в два раза, вы получите 1000000000000000000, что является точным ответом до 15 десятичных знаков; это все, что мы гарантируем. Если вам нужен совершенно точный ответ для работы с большими числами, используйте long для результатов менее 10 миллиардов миллиардов или большой класс целочисленной математики в System.Numerics, который будет поставляться со следующей версией платформы.
Проблема № 2: Существуют гораздо более эффективные способы вычисления модульных показателей, которые не требуют генерации огромных чисел; используйте их.
Однако то, что мы имеем здесь, это ситуация "дай человеку рыбу". Что было бы лучше, так это научить вас ловить рыбу; научитесь отлаживать программу с помощью отладчика.
Если бы мне пришлось отлаживать эту программу, первым делом я бы переписал ее так, чтобы каждый шаг на этом пути был сохранен в локальной переменной:
double intCount2 = 91;
double intHolder = 0;
for (int i = 0; i <= intCount2; i++)
{
double cube = Math.Pow(i, 3) - 1;
double remainder = cube % intCount2;
if (remainder == 0)
{
if (cube != 0)
{
Console.WriteLine(i);
intHolder += i;
}
}
}
Теперь пройдитесь по нему в отладчике с примером, где вы знаете, что ответ неправильный, и найдите места, где ваши предположения нарушаются. Если вы это сделаете, вы быстро обнаружите, что 1000000 кубов минус 1 - это не 99999999999999999, а 1000000000000000000.
Так вот совет № 1: напишите код, чтобы в отладчике было легко проходить, и проверяйте каждый шаг в поисках того, который кажется неправильным.
Совет № 2: Обращайте внимание на тихие ноющие сомнения. Когда что-то выглядит унылым или есть что-то, чего вы не понимаете, исследуйте это, пока не поймете это.