Wątek przeniesiony 2016-05-23 14:16 z C# i .NET przez ŁF.

Instrumentacja kodu

0

Witam, mam do zrobienia projekt na studia i utknąłem w dość banalnym miejscu dlatego proszę o pomoc.
Mam problem, ponieważ w linijce "else if (Num % 2 == 0) modulo++; return false; " wymaga "}" i nie mam pojęcia jak to ogarnąć.
Z góry dzięki za pomoc.

{

            if (Num < 2) return false;
            else if (Num < 4) return true;
            else if (Num % 2 == 0) modulo++; return false;        
            else for (BigInteger u = 3; u < Num / 2; u += 2)
                if (Num % u == 0) modulo++; return false;    
            return true;
}
2
if (Num < 2)
    return false;
else if (Num < 4) 
    return true;
else if (Num % 2 == 0)
{
    modulo++;
    return false;
}
else 
{
    for (BigInteger u = 3; u < Num / 2; u += 2)
    {
        if (Num % u == 0) 
        {
            modulo++; 
            return false;
        }
    }
}

return true;
0

Zrobiłem coś takiego, ale cały czas w wynikach podaje wynik 0. Gdziem może być problem ?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Numerics;

namespace ConsoleApplication20
{
    class Program  
    {
        
        static uint modulo;

        static bool IsPrime(BigInteger Num)
        {

            if (Num < 2)
                return false;
            else if (Num < 4)
                return true;
            else if (Num % 2 == 0)
            {
                modulo++;
                return false;
            }
            else
            {
                for (BigInteger u = 3; u < Num / 2; u += 2)
                {
                    if (Num % u == 0)
                    {
                        modulo++;
                        return false;
                    }
                }
            }

            return true;

        }
        static void Main(string[] args)
        {
            BigInteger[] t = new BigInteger[7];
            t[0] = 100913;
            t[1] = 1009139;
            t[2] = 10091401;
            t[3] = 100914061;
            t[4] = 1009140611;
            t[5] = 10091406133;
            t[6] = 100914061337;

            
            Console.WriteLine("n\tmodulo");
            for (int i = 0; i < 8; i++)
            {
                modulo = 0;
                IsPrime(t[i]);
                Console.WriteLine("{0}\t{1}", t[i], modulo);
            }
           
        }
    }
}
1

Przecież sprawdzasz liczby pierwsze, więc nie zachodzi żaden warunek na modulo++.
Druga sprawa - jeśli sprawdzasz w pętli pierwszość liczby, to pętla jest do pierwiastka ze sprawdzanej liczby, a nie do połowy tej liczby. Dzięki temu Twój kod zamiast kilkadziesięciu minut wykona się w sekundę.
Trzecia sprawa - pętla po elementach t powinna być od 0 do t.Length.

Ostatnia sprawa - naucz się używać debugera (Debugowanie), Twoje życie stanie się łatwiejsze i nie będziesz pytać na forum o to, dlaczego kod, który sam napisałeś, działa jak działa.

0

W załączniku jest treść zadania i chodzi o to, że muszę policzyć ile razy dana linijka się wykonuje. Wiem, że nie zachodzi żaden warunek na modulo++ ale jednak program musi sprawdzić czy np. Num % u == 0 i tu powinno mi dodać modulo.

0

To musisz inaczej skonstruować warunki. Problem jest bardzo prosty, wysil się trochę.

0

Tak tylko najpierw muszę sprawdzić powyższy kod nie zmieniając go.

0

?

Czyli chcesz naprawić błąd nie zmieniając kodu? Powodzenia :-)

0

Chodzi mi o kod w załączniku, a nie ten w poście.

0

Inaczej skonstruuję pytanie: jak chcesz zliczyć ilość dzieleń bez zmodyfikowania podanego kodu?
Bierzesz ten kod, w odpowiednich miejscach dodajesz zwiększanie licznika dzieleń, przy okazji dodajesz pomiar czasu wykonania (będący tak naprawdę przeskalowaną do dziedziny czasu ilością dzieleń), na koniec wypluwasz to na ekran. Prawie już udało Ci się to zrobić, więc z czym problem?

0

Mam jeszcze jedno pytanie. Chce przerobić ten kod by wyszukiwał liczby pierwsze wokół wielokrotności liczby 6. Tylko nie mam pojęcia jak zrobić pętle by dla liczby 101 polecenie modulo wykonał 4 razy, a dla liczby 1009 już 11? Nie liczę na napisanie już kodu tylko jakąś podpowiedź.

1 użytkowników online, w tym zalogowanych: 0, gości: 1