15 Şubat 2010 Pazartesi

PRİMİTİF KÖK BULMA

#include<stdio.h>

#define P 1000

int asalkontrol(int); //girilecek p değerinin asallığını kontrol eder
int us_alma(int ,int ); //n değerinin p' ye kadar olan üslerini alır
int primitif[P]; //us değerleri tutulur

int main(){

int p,n,a=0,us,i,j,sayac;


printf("\n\nPRIMITIF KOK BULMA PROGRAMI\n\n");

while(a==0){ //p değeri kullanıcıdan alınır
printf("\np asal sayisini giriniz:");
scanf("%d",&p);
a=asalkontrol(p); //p asal olmalı, kontrol edilir
}

for(n=1;n<p;n++) //n değeri, 1' den p' ye kadar olan sayılardır
{
sayac=0; //us değerlerinin eşit olup olmadığına bakar

for(us=1;us<p;us++) //n değerinin 1' den p' ye kadar usleri alınır
primitif[us-1]=(us_alma(us,n))%p; //ussu alınan sayı mod p işleminden geçerek diziye atılır

for(i=0;i<p-1;i++) //eşitlik kontrol edilir,eşitlik varsa primitif kok yoktur
for(j=i+1;j<p;j++) //son kontrole(p-1) gerek yok
if(primitif[i]==primitif[j])
sayac++;

if(sayac==0){
printf("\n%d icin Primitif kok bulundu!!!\n",n);


for(i=1;i<p;i++) //primitif kok olan modu alınan us değerlerini ekrana yazar
printf("\n %d^%d = %d ",n,i,primitif[i-1]);

}//if sonu

if(sayac!=0)
printf("\n\n%d icin Primitif kok bulunamadi!!!\n",n);

}//for sonu

return 0;
}


int asalkontrol(int p){

int d=1,j;

for (j=2;j<p;j++) //p' ye kadar olan sayılardan herhangi birine tam bölünüyorsa
if (p%j==0) //asal değildir
d=0;

if (d==1)
return 1; //asal sayıdır
else{
printf("\n!!!!! p asal sayi olmali !!!!!\n");
return 0; //asal değildir
}

}


int us_alma(int us,int n){ //rekürsif; ilk değişken üs değeri, ikinci değişken taban

if (us==0)
return 1;
else
return (n*us_alma(us-1,n));
}


Hiç yorum yok:

Yorum Gönder