makisvisual Δημοσ. 3 Ιανουαρίου 2017 Δημοσ. 3 Ιανουαρίου 2017 Καλησπέρα παιδιά , έχω δημιουργήσει ένα πρόγραμμα ώστε να υπολογίζει τον εκθέτη (x) μέσα σε ένα εύρος επαναλήψεων. Σαν παράμετρο βάζω : g=257 h=369 p=1009( που αντιστοιχεί στο modulo) ωστόσο αντι για να μου δώσει σαν αποτέλεσμα x=104 που είναι η σωστή απάντηση μου δίνει συνεχώς 112 ανεξαρτήτως από τι τιμή θα δώσω στο modulo. δηλαδή είτε δώσω 1009 σαν τιμή είτε 21312 θα μου δώσει σαν αποτέλεσμα χ=112...για ποιο λόγο ?τι κάνω λάθος? παρακάτω είναι ο κώδικας. Ευχαριστώ εκ των προτέρων import java.util.Scanner;public class Crypt { private static int g; private static int h; private static int p ; public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.println("Δώστε αριθμό για την μεταβλητή g " ); int z = in.nextInt(); g = z; System.out.println("Δώστε αριθμό για την μεταβλητή h " ); int y = in.nextInt(); h = y; System.out.println("Δώστε αριθμό για την μεταβλητή p " ); int w = in.nextInt(); p = w; long temp ; boolean isTrue = true; int x = 0; while(isTrue) { temp = 0 ; temp = ((g^x) % p ); if (h == temp){ System.out.println("Ο διακριτός λογάριθμός είναι : " + x); isTrue = false; } else{ x = x + 1;} } } }
albNik Δημοσ. 3 Ιανουαρίου 2017 Δημοσ. 3 Ιανουαρίου 2017 g^x Δεν ειναι ο τελεστής που υψώνει σε δύναμη αυτος. Βασικά δεν υπαρχει τετοιος τελεστης στη java.
makisvisual Δημοσ. 4 Ιανουαρίου 2017 Μέλος Δημοσ. 4 Ιανουαρίου 2017 Δεν ειναι ο τελεστής που υψώνει σε δύναμη αυτος. Βασικά δεν υπαρχει τετοιος τελεστης στη java. το αντικατέστησα με : temp = (long) (( Math.pow(g,x)) % p ); και τώρα δεν τερματίζει ποτέ :/
Apsinthos07 Δημοσ. 4 Ιανουαρίου 2017 Δημοσ. 4 Ιανουαρίου 2017 Βασικά δεν υπαρχει τετοιος τελεστης στη java. Υπάρχει τέτοιος τελεστής στη java, απλά κάνει άλλη δουλειά.
NickSym Δημοσ. 4 Ιανουαρίου 2017 Δημοσ. 4 Ιανουαρίου 2017 Αν θεωρεις οτι ο αλγοριθμος σου ειναι σωστος τρεξε τον στο χαρτι με μικρα inputs να το διαπιστωσεις. Προσωπικα δε καταλαβα τι θες να υλοποιησεις οποτε και δε μπορω να βοηθησω..
albNik Δημοσ. 4 Ιανουαρίου 2017 Δημοσ. 4 Ιανουαρίου 2017 Υπάρχει τέτοιος τελεστής στη java, απλά κάνει άλλη δουλειά. Ηθελα να πω δεν υπάρχει τελεστής ανύψωσης.
imblish Δημοσ. 4 Ιανουαρίου 2017 Δημοσ. 4 Ιανουαρίου 2017 while(isTrue) { temp = 0 ; temp = ((g^x) % p ); if (h == temp){ System.out.println("Ο διακριτός λογάριθμός είναι : " + x); isTrue = false; } else{ x = x + 1;} το h ? sto if ( h==...
tsofras Δημοσ. 4 Ιανουαρίου 2017 Δημοσ. 4 Ιανουαρίου 2017 Ο temp είναι long και ο h είναι int, φτιάξε τον έλεγχο για την σύγκριση μέσα στην if
makisvisual Δημοσ. 4 Ιανουαρίου 2017 Μέλος Δημοσ. 4 Ιανουαρίου 2017 (επεξεργασμένο) το βρηκαααα απλα επειδη προέκυπταν τεράστιοι αριθμοί καθώς γινόταν ύψωση σε πολύ μεγάλες δυνάμεις οι long τιμές δεν μου έδιναν τις πραγματικές τιμές...κάνοντας χρήση BigInteger και χρησιμιμοποιώντας 2 μεθόδους 1)temp = g.pow( exponent); 2)result = temp.mod(p); προκύπτει το σωστό αποτέλεσμα.... (ευχαριστώ πάντως για το ενδιαφέρον) Επεξ/σία 4 Ιανουαρίου 2017 από makisvisual
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα