C :: Aufgabe #154 :: Lösung #2
2 Lösungen
#154
Symmetrische Primzahlen
Anfänger - C
von hollst
- 03.04.2017 um 13:55 Uhr
Wieviele Primzahlen P < 1.000.000 sind rückwärts gelesen auch eine Primzahl, jedoch ungleich sich selbst?
Anmerkung: Die (Prim)zahlen 2, 3, 5, 7, 11 erfüllen nicht die Bedingungen (sind rückwärts gelesen sich selbst gleich),
als erste erfüllt die 13 die Bedingungen.
Anmerkung: Die (Prim)zahlen 2, 3, 5, 7, 11 erfüllen nicht die Bedingungen (sind rückwärts gelesen sich selbst gleich),
als erste erfüllt die 13 die Bedingungen.
#2
von kathleenw (3600 Punkte)
- 01.07.2020 um 08:14 Uhr
#include <stdio.h>
#include <stdbool.h>
#include <math.h>
#include <string.h>
int stelle(int zahl, int stelle);
int anzahl(int zahl);
bool istPrim(int zahl);
int main(void)
{
int i,stellenanzahl,j,k,l, zaehler, umgedrehte_Zahl, grenze, anzahlderPrimzahlen;
int Primzahl[7];
grenze = 1000000;
anzahlderPrimzahlen = 0;
for (i=0;i<7;i++)
Primzahl[i]=0;
for (i=13; i<=grenze; i++) {
if (istPrim(i)==true) {
//ist eine Primzahl
//Zahl umstellen
stellenanzahl= anzahl(i);
zaehler= stellenanzahl;
for (j=0;j<stellenanzahl;j++){
Primzahl[j]= stelle(i,zaehler);
zaehler = zaehler -1;
}
umgedrehte_Zahl= Primzahl[0]+Primzahl[1]*10+Primzahl[2]*100+Primzahl[3]*1000+Primzahl[4]*10000+Primzahl[5]*100000+Primzahl[6]*1000000;
if (umgedrehte_Zahl<=grenze && umgedrehte_Zahl!=i){
if (istPrim(umgedrehte_Zahl)==true )
printf("%d und %d sind beides Primzahlen \n", i, umgedrehte_Zahl);
anzahlderPrimzahlen = anzahlderPrimzahlen +1;
}
}
else {
//ist keine Primzahl
}
}
printf("Es gibt %d Lösungen. Ohne doppelte gibt es %d Lösungen", anzahlderPrimzahlen, anzahlderPrimzahlen/2);
}
//
// gibt die x. Stelle einer Zahl zurück
int stelle(int zahl, int stelle)
{
zahl = fabs(fmod(zahl/pow(10,stelle-1),10));
return zahl;
}
//Bestimmt die Anzahl der Zeichen einer Zahl bsp: 37690 ==> anzahl=5
int anzahl(int zahl)
{
int zeichen;
char buffer[100];
sprintf(buffer,"%d",zahl);
zeichen = strlen(buffer);
return zeichen;
}
//prüfen ob es eine Primzahl ist
bool istPrim(int zahl) {
bool prim, faktorgefunden;
int t;
if (zahl <= 2) {
if (zahl < 2)
prim = false;
else
prim = true;
}
else {
if (zahl%2 == 0)
faktorgefunden = true;
else {
faktorgefunden = false;
t = 3;
while (t*t <= zahl && faktorgefunden == false) {
if (zahl % t == 0)
faktorgefunden = true;
else
t=t+2;
}
}
}
if (faktorgefunden==false)
prim = true;
else
prim = false;
return prim;
}
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1
