#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