Skip to content

Instantly share code, notes, and snippets.

@oguzhanvarsak
Last active March 20, 2021 20:57
Show Gist options
  • Save oguzhanvarsak/71838cd3b3b928f1968b017a3b9ef39c to your computer and use it in GitHub Desktop.
Save oguzhanvarsak/71838cd3b3b928f1968b017a3b9ef39c to your computer and use it in GitHub Desktop.
Write code to find the first prime fibonacci number larger than a given minimum, Use your code to compute the smallest prime fibonacci number 
greater than 227,000 (X) and find the sum of prime divisors of X + 1.
//
// main.m
//
//
// Created by Oğuzhan Varsak on 29.12.2020.
//
#import <Foundation/Foundation.h>
int Fibb(int number);
void findGreatest(void);
void Divisors(void);
int closestFib = 0;
int nums[2];
int X = 227000;
int sum=0;
int main(int argc, const char * argv[]) {
@autoreleasepool {
int number = 0;
printf("Number: ");
scanf("%d", &number); // 1- Girilen değer hafızaya kaydediliyor.
Fibb(number); // 2- Girilen değer ile Fibonacci fonksiyonu çağırılıyor.
findGreatest(); // * Adım 8
NSLog(@"First prime fibonacci number larger than %d is %d",number,closestFib);
Fibb(X); // 9- 227.000 sayısından büyük ilk fibonacci sayısı bulunuyor.
findGreatest(); // * Adım 8
NSLog(@"First prime fibonacci number greater than %d is %d",X,closestFib);
closestFib += 1; // 10- 227.000'den sonraki ilk büyük fibonacci sayısına 1 ekleniyor.
Divisors(); // 11- Bulunan sayının çarpanları toplamını hesaplayacak fonksiyon çağırılıyor.
}
return 0;
}
int Fibb(int number) {
int currentFib = 0;
int index = 1;
nums[0]=0; // 3- Fibonacci dizisinin ilk değerleri olan
nums[1]=1; // 0 ve 1 değerleri başlangıç için diziye ekleniyor.
while (currentFib < number) { // 4- Girilen değerden sonraki ilk fibonacci sayısını bulmak istediğimizden, fonksiyon 0'dan girilen değere kadar çalışacak.
index = (index+1)%2; // 5- Sıradaki fibonacci sayısının, saklanacağı dizinin hangi sırasına ekleneceğini belirleniyor.
nums[index] = nums[0]+nums[1]; // 6- Sıradaki fibonacci sayısı bulunuyor.
currentFib = nums[index]; // 7- Bulunan fibonacci sayısı sıradaki döngü için currentFib değişkenine atanıyor.
//NSLog(@"Fibb %d",currentFib); // - Fibonacci sayılarını konsola yazdırır.
}
return closestFib;
}
void findGreatest() {
if (nums[0] > nums[1]) { // 8- Dizi içerisindeki en büyük fibonacci sayısı, girilen değerden sonraki ilk sayı.
closestFib = nums[0]; // Bu kontrol ile büyük olan sayı closestFib değişkenine atanıyor.
} else {
closestFib = nums[1];
}
}
void Divisors() {
bool dividedByTwo = FALSE;
while (closestFib % 2 == 0) { // 12- Sayının 2 bölenleri bulunuyor.
closestFib = closestFib / 2;
dividedByTwo = TRUE; // 13- Eğer sayının 2 böleni varsa boolean değeri TRUE olarak değiştiriliyor.
}
if (dividedByTwo) { // 14- Boolean değeri TRUE olarak değiştirildiyse, seçilen sayı 2 ile bölünebilir anlamına geliyor.
sum += 2; // Bu işlem sayede sayının birden fazla 2 böleni olsa da bunlar toplama katılmamış oluyor.
}
for (int i = 3;i <= sqrt(closestFib);i+=2) {
while (closestFib % i == 0) {
sum += i;
closestFib = closestFib/i;
}
}
if (closestFib > 2) {
sum += closestFib;
}
NSLog(@"Sum of prime divisors of X+1 %d", sum);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment