[HOMEWORK] Math For Developers - Problem 1 SomePrimes
Някой може ли да ми каже, къде бъркам:
using System;
class SomePrimes
{
static void Main()
{
Console.WriteLine("Enter a number to check if it's prime:");
int prime = int.Parse(Console.ReadLine());
if (prime <= 1)
{
Console.WriteLine("Your number is NOT prime.");
}
else if (prime == 2)
{
Console.WriteLine("Your number is prime.");
}
else if (prime % 2 == 0)
{
Console.WriteLine("Your number is NOT prime.");
}
for (int i = 2; i <= prime - 1; i++)
{
if (prime % i == 0)
{
Console.WriteLine("Your number is NOT prime.");
}
else
{
Console.WriteLine("Your number is prime.");
}
}
}
}
Правя проверка за 3, 5 и 7 и всичко е ок. Правя проверка за 4 и накрая ми излиза, че е просто число, а като си гледам кода не би трябвало...уж. ?!
Здравей!
Много благодаря за помощта, знам от лекцията, че е по-добре / по-бързо е / да се ползва Math.Sqrt, но исках да го направя по този начин, просто за да го проследя, как работи / нещо като упражнение / и да си го изясня и кат код, не само като примера от слайда. Иначе с корен квадратен го подкарах и си работи супер! :)
Още веднъж благодаря за корекциите :)
П.С. Уха, пробвах го с макс int - чак се зачудих дали не се счупи нещо :D
Определено ще си го правя с Math.Sqrt :)
Такаа, малко промених първоначалния код според условието на задачата - да намерим, кои прости числа са на 24, 101 и 251 позиция и стигнах до момента, в който потребителя въвежда, кой ред да се провери и да се отпечата простото число на него, само че нещо се пооплетох / както се очакваше / :
using System;
using System.Collections.Generic;
class SomePrimesRange
{
static void Main()
{
for (int i = 2; i < 260; i++)
{
if (i % 2 == 0)
{
}
else if (i % i == 0)
{
Console.WriteLine(i);
}
List<int> numbers = new List<int>(260);
numbers.Add(i);
foreach (int a in numbers)
{
Console.WriteLine("Enter a position:");
int position = int.Parse(Console.ReadLine());
Console.WriteLine(position);
}
}
}
}
Не съм много сигурен дали това е правилния начин да се направи, но пък съм сигурен, че List-а ми не е където трябва. Някакви идеи? Моля те, не искам готов код, ако е възможно, а само насоки или идеи и да се помъча аз малко. После ще кача да видиш, какво съм написал :)
Привет man,
Странно е че :
1) Си декларирал списъка в цикъла
2) Проверката за Prime само това ли е :
if (i % 2 == 0)
{
}
else if (i % i == 0)
{
3) Това немога да го разбера :
foreach (int a in numbers)
{
Console.WriteLine("Enter a position:");
int position = int.Parse(Console.ReadLine());
Console.WriteLine(position);
Пишеш позицията на всяко число ли? :)
Препоръки :
1) Направи си един array , like this :
int[] Test = new int[100]; //примерно
Може би, защото на мен ми е по-лесно с масив, отколкото списък.
2) Виж си правилно алгоритъма за проверка на Prime Number, че засега май само 1/4 проверяваш. :)
3) Тествай и debug-вай докато не заработи :)
Debug-a може да ти помогне с алгоритъма, като видиш какво реално прави програмата ти.
=> Приема ли стойностите както очакваш, прави ли стъпките в цикъла както се очаква и т.н. т.н.
Успех!
Поздрави,
Владо
Здравей, Владо!
Извинявай, втория код който съм постнал е тотаааална боза, както си забелязал. Нещо не знам защо, но като го писах изобщо не съм гледал / нито пък мислил /. Идеята за масива никак не е лоша, но просто първоначално ми тръгна с идеята за лист. Ако искаш виж вариантите на RoYaL - доста са добри.
Благодаря за съветите и за новия начин, по който смятам да пробвам днес :)
Здравей
В случая нещата са по - сложни. Ще трябва да завъртиш цикъл до някое мн голямо число, тъй като няма как да знаеш например 789-то просто число в какъв диапазон е.
ЕДИТ: Сега видях, че колегата е отговорил по - подробно и по - правилно :). while докато броя на елементите в листа не станат равни на търсения брой :)
Аз бих го направил с лист от инт (не слагай декларацията на листа вътре в цикъл). ще слагам всяко намерено просто число в лист и след това ще проверявам, дали броя на елементите в листа е равен на позицията, която се търси. Ако е равен, брейквам от цикъла и принтирам елемента от листа list[pos].
Успех!