ArchivVorführaufgaben04

Primfaktorzerlegung

Vorführaufgabe 04 · C

  • Datei: vorfuehraufgabe04.c
  • Stand:
  • Umfang: 71 Zeilen
#include <stdio.h>
#include <stdlib.h>

unsigned long int prim(unsigned long int eingabe)
{
    unsigned long int zaehler=5;
    int adder=-1;

    if(eingabe % 2 == 0) return 2;
    if(eingabe % 3 == 0) return 3;

    while((eingabe % zaehler != 0) && (zaehler*zaehler<=eingabe))
    {
		zaehler+=3+adder;
		adder=-adder;
    }   
    if(zaehler*zaehler>eingabe)  return eingabe;
                                 else
								 return zaehler;
}

int main(int argc, char *argv[])
{
	unsigned long int eingabe1=0,eingabe2=0,zaehler,primzahl,aktuell,counter=0;

	if(argc==2 || argc==3)
	{
		eingabe1=atoi(argv[1]);
		
		if(argc==2) eingabe2=eingabe1;
					else
					eingabe2=atoi(argv[2]);
	}
	if((eingabe1==0)||(eingabe2==0))
    {
       printf("\n\tAufruf: primtest \"vonZahl\" \"bisZahl\"\n\n");
    }
    else
    {
		printf("\nPrimzahltest\n");
		if(eingabe1==1)
	    {
			printf("\n1 ist keine Primzahl.");
			eingabe1 = 2;
	    }
	    for(zaehler=eingabe1;zaehler<=eingabe2;zaehler++)
	    {
			aktuell  = zaehler;
			primzahl = prim(aktuell);
	
			if(primzahl==aktuell)
			{
			    printf("\n\n%d-----------PRIMZAHL-----------%d\n",aktuell,aktuell);
				counter++;
			}	    
			else
			{
			    printf("\n%d = %d",aktuell,primzahl);
				
			    while(primzahl*primzahl<=aktuell)
			    {
					aktuell /= primzahl;
					primzahl = prim(aktuell);
					printf("*%d",primzahl);
			    }
			}
		}
		printf("\n\n%d Primzahlen gefunden!\n\n",counter);
    }
    return 0;
}