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ü