Zadanie znalezienia ilości liczb bliźniaczych, do górnej granicy

0

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

4

Jakiej pomocy oczekujesz? Z czym sobie nie radzisz?

0

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;
}
1

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 inta — tzn. jeśli sobie ktoś zażyczy 2³¹ - 1 pary, to ta liczba będzie stanowczo poza zakresem inta.

0
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 inta — 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

0

W takim razie bardzo mocno zastanawiam się nad sensem definiowania funkcji blizniacze z parametrem int — a nie, chociażby, unsigned char

0

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

1

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ę.

0

jest pan w stanie wykonać ten projekt w całości? oczywiscie za opłata

0

Tak.

0
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;
}
0
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 ?

0

@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.

0

@Manna5: dziękuje bardzo za pomoc a czy mogłbyś wytłumaczyć co oznacza printf oraz scanf? bo nie do końca rozumiem

0

@Gandalf The Spray: printf wyświetla tekst w konsoli, a scanf zapsiuje dane wprowadzone przez uzytkownika
do zmiennej - w tym przypadku n

0

@Eldorad O.: czyli taki cin i cout ?

0

Tak — zaszłość z epoki kamienia łupanego C.

1 użytkowników online, w tym zalogowanych: 0, gości: 1