Wie überprüft man in C, ob eine Zahl eine Primzahl ist?

6 Antworten

Du kannst dir im Prinzip alle Primzahlen bis zu deiner Zahl bilden.

Die Zahlen 2 und 3 schreibst du einfach in den Code rein.

Dann schreibst du folgendes:


int i;
char isPrime;
for(i = 5; i <= gesuchteZahl; i = i+2)
{
isPrime = 1;
for(alle gefundenen Primzahlen, außer 2)
{
if((i % Primzahl) == 0)
{
//i ist keine Primzahl
isPrime = 0;
break;
}
}
if(isPrime)
{
i zu den gefunden Primzahlen dazu geben
}
}

Wenn am Ende, diese Algorithmus deine Zahl bei den gefundenen Primzahlen steht, sprich am letzten Platz deines Arrays ist deine Zahl eine Primzahlen.

Basieren tut der Algorithmus auf der mindestdistanz aller von aller Primzahlen >= 3 diese ist nämlich mindestens 2 (vielleicht auch größer, aber das ist eine einfache untere Schranke), darum inkrementiert man immer um 2.

Das suchen ob es sich bei i nun um einen Primzahl handelt, basiert auf der Primfaktorzerlegung, jede Zahl ist nämlich durch eine Multiplikation von Primzahlen darstellbar und damit auch durch mindestens eine kleinere Primzahl ganzzeilig Teilbar.

AusgegebeneZahl ist schon das Ergebnis einer Division; du prüfst später noch mal, ob der Rest einer Division 0 ist.

Wenn eine Zahl n durch eine andere Zahl k teilbar ist, hat das nichts damit zu tun, ob n auch durch (n-k) teilbar ist.

(Übrigens reicht es, zu prüfen, bis Quotient < Divisor)

1. ) ganz einfach AusgabeZahl % counter ist bei counter = 1 immer wahr.

2.) sie sollten die Funktion verlassen, wenn sie einen Teiler gefunden haben.

3.) Ihre Schleife sollte von 2 beginnen und so lange gehen bis das qudrat größer als die eingabezahl ist.

 
for( int i = 2 ; i*i <= eingabezahl ; i++ )
if( eingabezahl % i == 0 )
{
printf("Zahl %i ist durch %i teilbar.",eingabezahl,i);
return 0;
}

printf("Zahl %i ist prim.",eingabezahl);

Wie kann ich ganz einfach die quersumme einer Zahl in C++ berechnen?

Ich bin noch ein Anfänger in C++ und habe 2 Probleme. Und zwar ist mein Ziel ganz einfach eine Anwendung zu programmieren, das in der Lage sein soll die quersumme einer Zahl zu berechnen. Leider klappt das nicht so, wie es klappen sollte. Den wenn man eine 4 stelligen Zahl eingeben möchte, muss man nach jeder einzelnen Zahl die leertaste betätigen um die nächste Zahl eingeben zu können. Weil sonst wird die Eingabe nicht berechnet. Das 2 Problem ist das Zahlen wie z.B 1888 nicht richtig berechnet werden.

#include<iostream>
using namespace std;

int main()
{

   int zahl;
   cout<<"Gib eine 4 stellige Zahl ein\n";
   cin>>zahl>>zahl>>zahl>>zahl;


   cout<<"Die quersumme ist "<<zahl+zahl+zahl+zahl<<endl;

   cin.sync();
   cin.get();
   return 0;
}

Ich hoffe sehr ihr könnt mir behilflich sein. :)

...zur Frage

Wörterbuch programmiern in C

Hallo. :)

Ich hoffe von euch kann mir jemand meinen Fehler sagen. Ich soll nämlich ein Wörterbuch programmiern und wenn ich ein Wort eingeben, das ich in der Datenbank schon eingespeichter habe, funktioniert alles. Aber, wenn ein Wort kommt, dass noch nicht gespeichert ist, schmeißts mich immer raus. >.> ...eigentlich sollte eine Anfrage kommen, ob man das Wort speichern will...

also hier mal das Programm:

include<stdio.h>

include<conio.h>

include<string.h>

define MAX 100

typedef struct woerterbuch {

char wort[30+1];
char word[30+1];

}Buch;

void main() { int i=0; char search[20]; char suchen[20]; int zahl, gefunden=1, x=0; Buch liste[MAX]={"Hallo", "hello", "Auto", "car", "Sonne", "sun"};

printf("Geben Sie ein, ob Sie von Englisch auf Deutsch (1) oder von Deutsch auf Englisch (2) uebersetzen wollen! ");
scanf("%d", &zahl);

if(zahl==1)
{
    printf("\nGeben Sie ein englisches Wort ein, das Sie uebersetzen wollen! ");
    scanf("%s", search);

    do
    {   
        if(strcmp(search, liste[i].word)==0)
        {
            printf("Deutsch: %s ", liste[i].wort);
            x=1;
            gefunden=0;
        }

        i++;

    }while(x!=1);

    if(gefunden==1)
    {
        printf("\nIhr Wort ist nicht in der Datenbank enthalten!");
        /*printf("\nWenn Sie das Wort in die Datenbank hinzufügen wollen, drücken sie 1.");
        scanf("%d", add);

        if(add==1)
        {
            printf("Das deutsche Wort: ");
            scanf("%s", liste[i+1].wort);

            printf("Das englische Wort: ");
            scanf("%s", liste[i+1].word);
        }*/
    }
}

else
{
    printf("\nGeben Sie ein deutsches Wort ein, das Sie uebersetzen wollen! ");
    scanf("%s", suchen);

    do
    {   
        if(strcmp(suchen, liste[i].wort)==0)
        {
            printf("Englisch: %s ", liste[i].word);
            gefunden++;
            x=1;
        }
    i++;

    }while(x!=1);

    if(gefunden==1)
    {
        printf("\nIhr Wort ist nicht in der Datenbank enthalten!");
    }
}

getch();

}

Vielleicht kann mir hier jemand helfen. ? :)

Danke, schonmal im voraus. :)

P.S: und bitte keine Kommentare zum Stil oder sonst was...bin nicht das größte Genie im Programmiern, das weiß ich selber. :)

...zur Frage

Zahlenraten mit C programmieren

Hallo lieber Leser,

Ich habe ein Problem mit einer Aufgabe, die die C-Programmierung betrifft.

Es geht um ein C-Programm, das zufällig zwei ganze Zahlen a und b zwischen 1 und 1000 bestimmt, so dass a <= b gilt. Der Benutzer soll so lange aufgefordert werden, eine Zahl zu raten, bis er die Zahl gefunden hat, die genau in der Mitte von a und b liegt. Nach jedem Rateversuch erhält der Benutzer einen Hinweis: Ist die Zahl kleiner als a oder größer als b: „Viel zu klein!“ bzw. „Viel zu groß!“ Ist die Zahl im richtigen Bereich, aber näher einer Grenze als an der Mitte: „Zu klein!“ bzw. „Zu groß!“ Anderenfalls: „Ein bisschen zu klein!“ bzw. „Ein bisschen zu groß!“

Wenn der Benutzer richtig geraten hat, erhält er die Mitteilung „Richtig!“ und die Grenzen werden zur Kontrolle ausgegeben. Ich komme nicht richtig zurecht und stehe auf dem Schlauch.

Mein Code sieht bisher so aus, aber ich komme nicht so recht weiter: Auch wollte ich Zahlenräume schaffen, die unterscheiden zwischen "viel zu groß" und "ein bisschen zu groß" - die ich aber nicht umsetzten kann.

#include <stdio.h>
#include <time.h>
#include <stdlib.h>


//Funktion für die zufällige Nummer
//int randomNumber() {
//int r = rand() % 1001 + 1;


int main() {

    srand(time(NULL));

    //int a = randomNumber();
    //int b = randomNumber();

    int a, b;
    do{
        a = rand() % 1000 + 1;
        b = rand() % 1000 + 1;
    } while (a < b);
    int mitte = (a + b) / 2;
    int gerateneZahl;

    //Diese drei Zeilen habe ich nur genutzt, um zu überprüfen, ob die Zahlen stimmen
    printf("%i\n", a);
    printf("%i\n", b);
    printf("%i\n", mitte);

    printf("\nBitte geben Sie eine Zahl ein: ");
        scanf_s("%i", &gerateneZahl);


    while (a >= b) {

        printf("\nBitte geben Sie eine Zahl ein: ");
        scanf_s("%i", &gerateneZahl);

        if (gerateneZahl > mitte) {
            printf("ein bisschen zu groß\n");
        }
        if (gerateneZahl > (mitte)) {
            printf("viel zu gross\n");
        }
        else if (gerateneZahl < mitte) {
            printf("ein bisschen zu klein\n");
        }
        else if (gerateneZahl < (mitte)) {
            printf("viel zu klein\n");
        }
        if (gerateneZahl == mitte) {
            printf("Richtig! Die Grenzen waren %d und %d\n", a, b);
        }
    }

    return 0;

}

das > soll eigentlich ein < bzw > sein. Keine Ahnung wieso das so angezeigt wird.

Kann mir da jemand helfen bitte? Ich habe ein paar Probleme und bräuchte echt Hilfe. Ich wäre nicht hier wenn es nicht ernst wäre.

Danke!

...zur Frage

Was bedeutet das i++ in diesem Programm?

Hier der Code das programm liest einen satz ein und gibt jedes wort in einer neuen zeile wieder nur wofür das i++ am ende? ich kenns normal nur in ner forschleife um die steigerung z.b. also i=i+1 anzugeben ?!

#include <stdio.h>
main() {
int i=0;
char text[100];
printf("\nBitte einen Satz eintragen.\n");
gets(text);
while(text[i]) {
if(text[i] != '  ')
printf("%c",text[i]);
else
printf("\n");
i++;
}
}
...zur Frage

Mein Java Programm gibt "Primzahl" 9 aus?!?!?!?!?

int zahl, Limit, P;

zahl = 1;                        //Primzahlen von...
Limit = 10;                      //...bis                     
boolean Prim = true;             // Prim = true wenn "zahl" eine Primzahl ist

System.out.println("Die Primzahlen zw. den Zahlen " + zahl + " und " + Limit + " sind: ");

while (zahl<=Limit) {            // solang "zahl" kleiner als "Limit" ist 
  if (zahl%2 == 0) {
    Prim = false; 

  } 
  if (Prim) {
    System.out.println(zahl);

  } 
  else{

    Prim = true;

  }
  zahl++;
}
...zur Frage

Was möchtest Du wissen?