makisvisual Δημοσ. 3 Ιανουαρίου 2017 Share Δημοσ. 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 Share Δημοσ. 3 Ιανουαρίου 2017 g^x Δεν ειναι ο τελεστής που υψώνει σε δύναμη αυτος. Βασικά δεν υπαρχει τετοιος τελεστης στη java. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
makisvisual Δημοσ. 4 Ιανουαρίου 2017 Μέλος Share Δημοσ. 4 Ιανουαρίου 2017 Δεν ειναι ο τελεστής που υψώνει σε δύναμη αυτος. Βασικά δεν υπαρχει τετοιος τελεστης στη java. το αντικατέστησα με : temp = (long) (( Math.pow(g,x)) % p ); και τώρα δεν τερματίζει ποτέ :/ Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Apsinthos07 Δημοσ. 4 Ιανουαρίου 2017 Share Δημοσ. 4 Ιανουαρίου 2017 Βασικά δεν υπαρχει τετοιος τελεστης στη java. Υπάρχει τέτοιος τελεστής στη java, απλά κάνει άλλη δουλειά. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
NickSym Δημοσ. 4 Ιανουαρίου 2017 Share Δημοσ. 4 Ιανουαρίου 2017 Αν θεωρεις οτι ο αλγοριθμος σου ειναι σωστος τρεξε τον στο χαρτι με μικρα inputs να το διαπιστωσεις. Προσωπικα δε καταλαβα τι θες να υλοποιησεις οποτε και δε μπορω να βοηθησω.. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
albNik Δημοσ. 4 Ιανουαρίου 2017 Share Δημοσ. 4 Ιανουαρίου 2017 Υπάρχει τέτοιος τελεστής στη java, απλά κάνει άλλη δουλειά. Ηθελα να πω δεν υπάρχει τελεστής ανύψωσης. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
imblish Δημοσ. 4 Ιανουαρίου 2017 Share Δημοσ. 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==... Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
albNik Δημοσ. 4 Ιανουαρίου 2017 Share Δημοσ. 4 Ιανουαρίου 2017 Παίζει ... isTrue=false Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
tsofras Δημοσ. 4 Ιανουαρίου 2017 Share Δημοσ. 4 Ιανουαρίου 2017 Ο temp είναι long και ο h είναι int, φτιάξε τον έλεγχο για την σύγκριση μέσα στην if Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
makisvisual Δημοσ. 4 Ιανουαρίου 2017 Μέλος Share Δημοσ. 4 Ιανουαρίου 2017 (επεξεργασμένο) το βρηκαααα απλα επειδη προέκυπταν τεράστιοι αριθμοί καθώς γινόταν ύψωση σε πολύ μεγάλες δυνάμεις οι long τιμές δεν μου έδιναν τις πραγματικές τιμές...κάνοντας χρήση BigInteger και χρησιμιμοποιώντας 2 μεθόδους 1)temp = g.pow( exponent); 2)result = temp.mod(p); προκύπτει το σωστό αποτέλεσμα.... (ευχαριστώ πάντως για το ενδιαφέρον) Επεξ/σία 4 Ιανουαρίου 2017 από makisvisual Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
albNik Δημοσ. 4 Ιανουαρίου 2017 Share Δημοσ. 4 Ιανουαρίου 2017 υπάρχει και η modPow ... πολύ πιο γρήγορη Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
hh12 Δημοσ. 6 Ιανουαρίου 2017 Share Δημοσ. 6 Ιανουαρίου 2017 ο τελεστης ^ στη java ειναι bitwise or Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα