הערה (קובץ קוד)
קובץ זה הוא קובץ קוד מסוג C.
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define DONT_KNOW "I_dont_know"
#define BASE_POWER 2
#define STARTING_INDEX 2
void printIDontKnow()
{
printf("%s", DONT_KNOW);
exit(0);
}
int midterm_quiz_q2(long long n);
//Uncomment the first line in main if you don't know the answer.
//Otherwise, do not change main!!!
int main()
{
// printIDontKnow();
long long n;
if (scanf("%lld", &n) != 1)
{
return 1;
}
printf("%d", midterm_quiz_q2(n));
return 0;
}
/*
* this function gets a number and returns if it has dividers different from 1
* and itself.
* input:
* 1. int num: the number to be checked.
* output(bool):
* true if the number has dividers.
*/
bool hasDividers(int num)
{
bool isDividers = false;
for (int i = 2; i < num; i++)
{
double temp = (double)num / i;
if (((int)temp) == temp)
{
isDividers = true;
}
}
return isDividers;
}
long long power(int base, int exponent)
{
long long result = base;
for (int i = 1; i < exponent; i++)
{
result *= base;
}
return result;
}
int midterm_quiz_q2(long long n)
{
int numberOfNumbers = 0, i = STARTING_INDEX + 1;
long long current = power(BASE_POWER, STARTING_INDEX) - 1;
while (current <= n)
{
if (!hasDividers(current))
{
numberOfNumbers++;
}
current = power(BASE_POWER, i) - 1;
i++;
}
return numberOfNumbers;
}