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);
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ü