Домашна работа - Методи и Дебъгване - Primes in Given Range
Здравейте колеги имам един проблем в моя код: http://pastebin.com/awnLGTWj
Ако можете да помогнете ще съм благодарен. Листовете са ми нови и нещо се оплетох.
Благодаря!
Здравейте колеги имам един проблем в моя код: http://pastebin.com/awnLGTWj
Ако можете да помогнете ще съм благодарен. Листовете са ми нови и нещо се оплетох.
Благодаря!
Според мен този код:
if (currentNum % 2 == 0)
трябва да промениш така:
if (currentNum % diffence == 0)
Също така, за отпечатване на отговора е по-добре да използваш string.Join(", " primes);.
А може ли да опишеш какъв е проблема. На пръв поглед виждам едни точка и запетая в нищото. public static void Main ти е много странно написан...нямаш public.
На мястото на точката и запетаята трябва да има или брейк или да връща тру или фолс не съм сигурен. Извинявам се копирал съм кода докато се борих да го оправя и не съм видял. Проблема е че ми дава повече отколкото трябва номера.
Първия нулев тест е от 0 до 10 и трябва да върне 2, 3, 5, 7 а на мен ми връща 0 1 2 3 5 7 9. за другите да не говорим колко повече номера дава в повече.
Някой ще помогне ли да корегираме моето решение получавам 75/100 точки .
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PrimeCheker
{
public class PrimeCheker
{
public static void Main()
{
ulong number = ulong.Parse(Console.ReadLine());
ulong count = IsPrime(number);
if (count == 2)
{
Console.WriteLine("True");
}
else
{
Console.WriteLine("False");
}
}
private static ulong IsPrime(ulong num)
{
ulong count = 0;
for (ulong i = 1; i <= num; i++)
{
if (num % i == 0)
{
count++;
}
}
num = count;
return num;
}
}
}
Проблема ти се получава защото въртиш цикала до края на числото и на последните тестове ти гърмят провереките в Judge защото задават големи числа.
Преправих ти почти целият код. Първо си правиш една променлива prime, която първоначално инициализираме с true. Променивата divider инициализираме с най малкият възможен делител => 2 , а maxdivider ще е равен на корена на числото(тъй като ако имаме делител, който е по-голям от корена на числото то със сигурност има и друг делител, който е обаче по-малък от корена на числото, затова въртим до него и по този начин намаляваме итерациите на цикъла и спестяваме време.)
Останалото е лесно, ако числото е просто prime не се променя и връща true, ако не е -> връща false.
Ето ти преработеният код,
http://pastebin.com/PrC5wYuc
Много благодаря колега успях да си оправя целия код! Цял ден изгубих в търсене на проблема.