Project Euler

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Re: Project Euler

Δημοσίευσηαπό stamatiou » 03 Ιούλ 2012, 19:23

Ilias95 έγραψε:Για να το καταλάβεις καλύτερα στο γυμνάσιο (;) αν θυμάμαι καλά είχαμε μάθει να αναλύουμε έναν αριθμό σε γινόμενο πρώτων παραγόντων.
Πχ. 288 = 2 * 2 * 2 * 2 * 2 * 3 * 3 = 2^5 * 3^2

Απ' το παραπάνω είναι φανερό ότι ο μέγιστος πρώτος παράγοντας του 288 είναι το 3.

Δεν το θυμάμαι αυτό :P
@pmav99 Ευχαριστώ πολύ, νομίζω το κατάλαβα :D Θα το κοιτάξω και μετά...
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

Re: Project Euler

Δημοσίευσηαπό stamatiou » 03 Ιούλ 2012, 19:26

Αυτή είναι μια πιο απλή εκδοχή: http://ideone.com/db9jm
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

Re: Project Euler

Δημοσίευσηαπό pmav99 » 03 Ιούλ 2012, 19:59

Χρησιμοποιείς το κόσκινο του Ερατοσθένη που είναι ο πιο αργός αλγόριθμος. Άμα θες ψάξε για πιο αποδοτικούς αλγόριθμους στο νετ. Θα βρεις διάφορα.
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

Re: Project Euler

Δημοσίευσηαπό stamatiou » 03 Ιούλ 2012, 20:19

pmav99 έγραψε:Χρησιμοποιείς το κόσκινο του Ερατοσθένη που είναι ο πιο αργός αλγόριθμος. Άμα θες ψάξε για πιο αποδοτικούς αλγόριθμους στο νετ. Θα βρεις διάφορα.

Θα το τσεκάρω :D
Ξεκίνησα το πρόβλημα 3 και η λύση μου φαίνεται σωστή, αλλά μου τη βγάζει λάθος:
Spoiler: show
Κώδικας: Επιλογή όλων

#include <stdio.h>
#include <string.h>

#define MAX_LEN 6
#define MAX_COM 998001

int generate(void);
int is_pal(int num);

int main(void) {
printf("%d\n", generate());
return 0;
}

int generate(void) {
int i;

for(i = MAX_COM; i >= 0; i--) {
if(is_pal(i))
return i;
}

}

int is_pal(int num) {
int or = num, rev = 0, i;

while(num > 0) {
i = num % 10;
rev = rev * 10 + i;
num /= 10;
}

if(or == rev)
return 1;

return 0;
}

Μήπως έχω καταλάβει λάθος την εκφώνηση;
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

Re: Project Euler

Δημοσίευσηαπό stamatiou » 04 Ιούλ 2012, 16:51

migf1 έγραψε:
UnKnown96 έγραψε:MigF1, άψογος όπως πάντα :)
Ευχαριστώ!

Τίποτα βρε συ :)

Η λύση μου στο Project Euler - Problem #5 (σε C)
Project Euler, Problem #5 έγραψε:
2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder.

What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20?


Νορμάλ λύση:
Spoiler: show
Κώδικας: Επιλογή όλων

#include <stdio.h>
int divisible_byrange(unsigned long int num, int low, int high)
{
int broken = 0; // boolean false
register int i;
for (i=low; !broken && i < high+1; i++)
broken = (num % i) != 0;
return broken;
}

int main( void )
{
unsigned long int num = 0;
for ( num=1; divisible_byrange(num, 1, 10); num++)
;
printf("%ld\n", num);
return 0;
}

Παπατζίδικη λύση :lol:
Spoiler: show
Κώδικας: Επιλογή όλων

#include <stdio.h>
int main( void )
{
register int i, broken = 0; // boolean false
unsigned long int num = 0;

for ( num=1; !broken; num++) {
for (i=1; !(broken=(num % i) != 0) && i < 20; i++)
;
broken = !broken;
}
printf("%ld\n", --num);
return 0;
}


Η λύση σου είναι ίδια με αυτήν εδώ;
Spoiler: show
Κώδικας: Επιλογή όλων
#include <stdio.h>

#define LIMIT 20


int bruteforce(void) {
int i, num;

for(num = 1; ; num++) {
printf("%d ", i);
for(i = 1; i <= LIMIT && (num % i == 0); i++)
;

if(i == LIMIT + 1)
return num;
}

return 0;
}

int main(void) {
printf("%d\n", bruteforce());
return 0;
}

Επειδή η δικιά μου παίρνει 15 λεπτά!
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

Re: Project Euler

Δημοσίευσηαπό stamatiou » 05 Ιούλ 2012, 18:29

Έφτασα στο problem 8!
Ο αλγόριθμος μοιάζει ολόσωστος αλλά το site μου βγάζει λάθος την απάντηση...
Spoiler: show
Κώδικας: Επιλογή όλων
#include <stdio.h>
#include <string.h>

#define LENGTH 1000

int bruteforce(char *num);

int main(void) {
char num[LENGTH];
int i;

freopen("input", "r", stdin);

for(i = 0; i < LENGTH; i++)
num[i] = getchar();

printf("\n\n%d\n", bruteforce(num));
return 0;
}

int bruteforce(char *num) {
int i1, i2, max, product;

for(i1 = max = 0; i1 < LENGTH; i1++) {
for(i2 = 0, product = 1; i2 < 5 && i2 < LENGTH; i2++)
product *= num[i1 + i2] - '0';

if(product > max)
max = product;
}

return max;
}
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

Re: Project Euler

Δημοσίευσηαπό konnn » 10 Ιούλ 2012, 11:14

UnKnown96 έγραψε:
Έχω αυτό το πρόβλημα:
http://projecteuler.net/index.php?section=problems&id=1

Αν θέλει κάποιος ας υλοποιήσει μια λύση σε ψευδοκώδικα ώστε να καταλαβαίνουν και αυτοί που δε γνωρίζουν C ή Python . Μπορεί δώσουν λύση σε κάποια άλλη γλώσσα καθώς επίσης να τον τοποθετούσαμε και εδώ.

1 Linux: Μέτριος ┃ Προγραμματισμός: Μέτριος ┃ Αγγλικά: Προχωρημένος
2 Desktop : Ubuntu 16.04 64bit
a Intel Core i3 CPU 530 2.93GHz ‖ RAM 3824 MiB ‖ Intel DH55HC -
b nVidia Device [10de:1040] (rev a1)
c eth0: Intel 82578DC Gigabit Network Connection
3 Notebook : Ubuntu 16.04 64 bit
a Intel Core i3-2365M CPU @ 1.40GHz ‖ RAM 3854 MiB ‖ LENOVO 20197
b Intel 2nd Generation Core Processor Family Integrated Graphics Controller
c 5 wlan0: Intel Centrino Wireless-N 2230 ⋮ eth0: Realtek RTL8101E/RTL8102E

Αυτόματη υπογραφή.
Άβαταρ μέλους
konnn
Συντονιστής
Συντονιστής
 
Δημοσιεύσεις: 3568
Εγγραφή: 12 Ιούλ 2010, 17:54
Τοποθεσία: Καλαμάτα
Launchpad: konnn
Εκτύπωση

Προηγούμενη

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι