Skocz do zawartości

Temat został przeniesiony do archiwum

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

Jekbe

Java, liczby pierwsze - problem

Rekomendowane odpowiedzi

Hej. Napisałem ten oto prosty programik:

 

package nauka;

 

import java.util.Scanner;

 

public class p1

{

public static void main(String[]args)

{

Scanner i = new Scanner (System.in);

 

int n = i.nextInt();

int l;

 

for (l=1; l<=n; l++)

{

if (t(l))

{

System.out.println(l + " TAK");

}

else

{

System.out.println(l + " NIE");

}

}

i.close();

 

}

 

public static boolean t(int l)

{

int a;

for (a=2; a<=Math.sqrt(l); a++)

{

if (l==1)

{

return false;

}

else if (l%a==0)

{

return false;

}

}

return true;

}

}

 

i jest z nim problem. Mianowicie 1 według programu jest liczbą pierwszą. Kompletnie nie wiem co robię źle. Niby jak patrzę to nawet wykonując po kolei to co ma robić kod wychodzi mi dobrze, ale jak uruchamiam to wynik jest błędny. Da mi ktoś przynajmniej jakąś podpowiedź gdzie mam szykać błędu, na razie nie proszę o gotowca, wolę sam znaleźć błąd, więcej się nauczę.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Czytamy przyklejone tematy? Popraw to czego brakuje.

 

Na dobry start: miej litość dla siebie i innych, i nazywaj zmienne i funkcje jak człowiek...

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

package nauka;

import java.util.Scanner;

public class p1 
{
public static void main(String[]args) 
{
	Scanner i = new Scanner (System.in);

	int n = i.nextInt();
	int l;

	for (l=1; l<=n; l++)
	{
		if (t(l))
		{
			System.out.println(l + " TAK");
		}
		else
		{
			System.out.println(l + " NIE");
		}
	}
	i.close();

}

public static boolean t(int l)
{
	int a;
	for (a=2; a<=Math.sqrt(l); a++)
	{
		if (l==1)
		{
			return false;
		}
		else if (l%a==0)
		{
			return false;
		}
	}
	return true;
}
}

 

teraz lepiej?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Zdecydowanie :) Posty można co prawda edytować, ale lepszy rydz niż nic.

Z tymi nazwami to serio - funkcje i zmienne po to mają nazwy, by one coś mówiły. Jednoliterowce sugerują (poza pewnymi wyjątkami), że autor kodu albo nie wie, do czego służy zmienna (zły znak), albo celowo trolluje innych (i siebie często też).

 

Zastanów się - czy wywołując funkcję t dla jedynki, wykonanie chodź raz przechodzi przez for'a? Ile wynosi pierwiastek dla 1?

 

Przy okazji:

dlaczego piszesz

int l;
for (l=1; l<=n; l++)

zamiast

for (int l=1; l<=n; l++)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

zamiast

 public static boolean t(int l)
       {
               int a;
               for (a=2; a<=Math.sqrt(l); a++)
               {
                       if (l==1)
                       {
                               return false;
                       }
                       else if (l%a==0)
                       {
                               return false;
                       }
               }
               return true;
       }

 

 public static boolean t(int l)
       {
               int a;
               for (a=2; a<=Math.sqrt(l); a++)
               {
                       if (l==1 || l%a==0)
                       {
                               return false;
                       }                        
               }
               return true;
       }

 

Juz abstrahując od nazwy metody i zmiennych chyba lepiej się to czyta? :E

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jeszcze lepiej, to wywalić sprawdzenie czy to 1 przed pętlę. Po co ciągle mielić taki warunek, skoro w obiegu pętli wynik zawsze będzie ten sam?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

  • Tematy

  • Odpowiedzi

    • Taa, bo jest niby moduł TPM zainstalowany? Prędzej samo gniazdo na moduł   Tak, wiem że do win11 wystarczy aktywować to gniazdo, nie musi być fizycznego modułu. Wtedy w dzienniku zdarzeń jest coś takiego: i tak to sobie działało. Teraz dziennik zamiast informacją "To zdarzenie wyzwala operację inicjowania obsługi lub sprawdzania stanu modułu TPM." wita takim błędem jak wyżej, ale po jakimś czasie pojawiają się następne dwie informacje które zacytowałem wyżej. Wszystko opisane jako źródło: TPM-WMI. Z tego co widzę to u mnie pojawiło się to 11 kwietnia tego roku.  10 kwietnia weszły mi takie aktualizacje KB5036620 która dotyczy .NET Framework oraz KB5036893 która zawiera nieco więcej zmian i może w niej coś jest namieszane.
    • Już ci napisałem wyżej od głównych do trc potem trrd i tfaw. Sprawdź czy to stabilne zrób z 10 pętli nawet na porfilu v3. Potem ewentualnie można spróbować czy zrobią 300ns na trfc   
    • Na konsolach też nic więcej oprócz trybów jakość i wydajność i jakiegokolwiek dostosowania tego pod nowe konsole. "Tryb jakości: 30 FPS*, rozdzielczość 4K, ustawienia ultra, nie powinny wymagać dynamicznego skalowania rozdzielczości." Nie wiem co oni do końca mieli na myśli pisząc "nie powinny" Dla czego w ogóle takiego określenia użyli? Albo będzie 4k, albo będzie dynamiczna rozdzielczość. Jakby sami nie wiedzieli jak ten tryb działa
    • Jako że już mi z AMD nie po drodze to dzisiaj takie coś sobie sprawiłem, muszę przyznać że chłodzenie jest bardzo dobre. 4070S Aorus. Na start zapodałem 2950MHz i 1.05V.
  • Aktywni użytkownicy

×
×
  • Dodaj nową pozycję...