sayfa başı

22 Şubat 2019 Cuma

C Çalışma Soruları – 6 (en yakın asal sayı)

Necati Ergin Hocamın kendi sayfasında bulunan çalışma sorularını ve cevaplarını burada yanıtlamaya çalıştım. Sorulara buradan ulaşabilirsiniz.

Kendisine gönderilen tam sayıdan daha küçük ilk asal sayıyı bulan closest_prime isimli işlevi tanımlayınız:


int closest_prime(int value);

işlevin geri dönüş değeri value değerinden küçük en büyük asal sayı olacaktır. Eğer böyle bir asal sayı yok ise işlev hata değeri olarak -1 değerini döndürür.

Tanımladığınız işlevi aşağıdaki kodla test edebilirsiniz:


#include <stdio.h>

int closest_prime();

int main()
{
int a[10] = {1810, 2678, 8887, 13452, 16982, 21777, 29016, 33010, 36876, 42011};
int b[10] = {1801, 2677, 8867, 13451, 16981, 21773, 29009, 32999, 36871, 41999};
int k;

for (k = 0; k < 10; ++k) {
if (closest_prime(a[k]) != b[k]) {
printf("yanlis cozum\n");
return 0;
}
}

printf("muhtemelen dogru cozum\n");

return 0;
}
Yanıt:


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

/*
* if num is prime number, return true, otherwise return false
*/
bool isPrimeNum(int num)
{
 int i;
 
 if (num < 2)
 {
  return false;
 }
  
 for(i = 2; i <= (num / i); i++)
 {
  if((num % i) == 0)
  {  
   return false; //number is not prime num
  }
 } 
 
 return true;
}

int closestPrimeNum(int num)
{
 int retVal = -1; 
 int counter = 2;
 
 if (num <= 2)
 {
  return retVal;
 }
 else if (3 == num)
 {
  return 2; //min prime num
 }
 
 if ((num % 2) == 0)
 {  
  counter = 1;
 }
 
 while (1)
 {
  
  // find first bigger closest prim number
 /* if (isPrimeNum(num + counter))  
  {
   retVal = num + counter; 
   break;
  }
 */
  if (isPrimeNum(num - counter))
  {
   retVal = num - counter;
   break;
  }         
  
  counter += 2; // just odd number should be checked. 
 }
  
 return retVal;  
}


int main()
{
 int a[10] = {1810, 2678, 8887, 13452, 16982, 21777, 29016, 33010, 36876, 42011};
 int b[10] = {1801, 2677, 8867, 13451, 16981, 21773, 29009, 32999, 36871, 41999};
 int k;

 for (k = 0; k < 10; ++k) 
{
  if (closestPrimeNum(a[k]) != b[k]) 
  {
   printf("yanlis cozum\n");
   return 0;
  }
 }

 printf("muhtemelen dogru cozum\n");
 
 return 0;
}

Hiç yorum yok:

Yorum Gönder

Son Ütücü