Liczby bliźniacze to liczby pierwsze różniące się o 2. W pierwszej setce jest osiem par takich liczb: 3 i 5, 5 i 7, 11 i 13, 17 i 19, 29 i 31, 41 i 43, 59 i 61, 71 i 73. Zdefiniuj funkcję blizniacze(int n)
, której parametrem jest liczba naturalna n
, a wynikiem pierwsza liczba z n
-tej pary liczb bliźniaczych. Sprawdź działanie funkcji dla podanych poniżej parametrów.
Wynikiem funkcji blizniacze(3)
jest 11
.
Wynikiem funkcji blizniacze(7)
jest 59
.
Potrzbuje tego asap - Jak ktoś pomoże to jest szef
Jakiej pomocy oczekujesz? Z czym sobie nie radzisz?
Doszedłem do tego że napisałem funkcje która sprawdza czy liczba jest pierwsza i dalej nie wiem jak ruszyć
#include<iostream>
using namespace std;
bool czy_pierwsza(int n)
{
if(n<2)
return false;
for(int i=2;i*i<=n;i++)
if(n%i==0)
return false;
return true;
}
Dalej możesz — na przykład, to nie jest optymalne rozwiązanie, ale jest proste — generować sobie w pętli liczby w ten sposób, że idziesz po nieparzystych (dwie liczby parzyste nigdy nie będą liczbami bliźniaczymi, bo jest tylko jedna parzysta liczba pierwsza — 2) i patrzysz, czy zarówno sprawdzana liczba, jak i liczba o dwa od niej większa, są pierwsze; i jeśli są, to znalazłeś parę liczb bliźniaczych. Będzie to, mniej-więcej, wyglądać tak:
for (int found_twin_prime_pairs = 0, int x = 3; found_twin_prime_pairs < n; x += 2) {
if (czy_pierwsza(x) && czy_pierwsza(x + 2) {
found_twin_prime_pairs++;
}
}
Oczywiście, podane rozwiązanie ma sporo problemów — stosunkowo niską wydajność, oraz problem z tym, że wygenerowanie bardzo wysokiej pary przepełni nam int
a — tzn. jeśli sobie ktoś zażyczy 2³¹ - 1 pary, to ta liczba będzie stanowczo poza zakresem inta.
Althorion napisał(a):
Dalej możesz — na przykład, to nie jest optymalne rozwiązanie, ale jest proste — generować sobie w pętli liczby w ten sposób, że idziesz po nieparzystych (dwie liczby parzyste nigdy nie będą liczbami bliźniaczymi, bo jest tylko jedna parzysta liczba pierwsza — 2) i patrzysz, czy zarówno sprawdzana liczba, jak i liczba o dwa od niej większa, są pierwsze; i jeśli są, to znalazłeś parę liczb bliźniaczych. Będzie to, mniej-więcej, wyglądać tak:
for (int found_twin_prime_pairs = 0, int x = 3; found_twin_prime_pairs < n; x += 2) { if (czy_pierwsza(x) && czy_pierwsza(x + 2) { found_twin_prime_pairs++; } }
Oczywiście, podane rozwiązanie ma sporo problemów — stosunkowo niską wydajność, oraz problem z tym, że wygenerowanie bardzo wysokiej pary przepełni nam
int
a — tzn. jeśli sobie ktoś zażyczy 2³¹ - 1 pary, to ta liczba będzie stanowczo poza zakresem inta.
to ma być prosty projekt do szkoły wiec górny zakres sprawdzanych par jest do 100
W takim razie bardzo mocno zastanawiam się nad sensem definiowania funkcji blizniacze
z parametrem int
— a nie, chociażby, unsigned char
…
dostaliśmy takie zadanie w szkole na zaliczenie więc zależy mi żeby to zrobić i mieć spokój bo z c++ nie jest mi do końca po drodze gdyż zaczynam przygodę z programowaniem i chce się skupić na nauce pythona
jeżeli ktoś mógłby mi napisać taki prosty projekt to był bym bardzo wdzięczny
Dostałeś wszystkie potrzebne informacje — właściwie gotowca — tutaj: https://4programmers.net/Forum/C_i_C++/370537-liczby_blizniacze_zadanie_asap?p=1935811#id1935811
Jeśli dalej jest coś niejasne, z czymś sobie nie radzisz — zadaj konkretne pytanie, żeby uzyskać konkretną odpowiedź. Jeśli wolisz, żeby ktoś Cię wyręczył, zamieść odpowiedni temat w Ogłoszeniach drobnych i podaj stawkę.
jest pan w stanie wykonać ten projekt w całości? oczywiscie za opłata
Tak.
int pierwsza (int n)
{
int d;
d = 2;
while (d * d <= n) {
if (!(n % d))
return 0;
++d;
}
return 1;
}
int blizniacze (int n)
{
int a;
a = 1;
while (n--)
do
++a;
while (! (pierwsza (a) && pierwsza (a + 2)));
return a;
}
Manna5 napisał(a):
int pierwsza (int n) { int d; d = 2; while (d * d <= n) { if (!(n % d)) return 0; ++d; } return 1; } int blizniacze (int n) { int a; a = 1; while (n--) do ++a; while (! (pierwsza (a) && pierwsza (a + 2))); return a; }
oo Super i teraz w main()
mam tą funkcje blizniacze()
wywołać tak ?
@Gandalf The Spray: Tak, nie zamieściłem main
-a ponieważ myślałem, że zadanie sprowadza się tylko do napisania procedury blizniacze
. Oto odpowiednia funkcja główna.
#include <stdio.h>
/* TUTAJ FUNKCJE Z POPRZEDNIEGO POSTU */
int main ()
{
int n, b;
printf ("Ktora para liczb blizniaczych? ");
scanf ("%u", &n);
b = blizniacze (n);
printf ("Pierwsza liczba z pary to %u, a druga %u.\n",
b, b + 2);
return 0;
}
https://onlinegdb.com/-LoKkFVRwe - cały kod w serwisie Online GDB z możliwością uruchomienia.
@Manna5: dziękuje bardzo za pomoc a czy mogłbyś wytłumaczyć co oznacza printf oraz scanf? bo nie do końca rozumiem
@Gandalf The Spray: printf wyświetla tekst w konsoli, a scanf zapsiuje dane wprowadzone przez uzytkownika
do zmiennej - w tym przypadku n
@Eldorad O.: czyli taki cin i cout ?
Tak — zaszłość z epoki kamienia łupanego C.
@Gandalf The Spray: tak