Конструктивно побудуємо потрібну послідовність. Оскільки синус є періодичною функцією з періодом , будемо шукати її у вигляді sin(k(2π + ɛ)), де k = 0, 1, 2, ... . Знайдемо таке натуральне число , для якого існує ціле , що A = 2πk + ɛ для якомога меншого значення . Наприклад, якщо перебрати від до , то найменше досягається при A = 710. У цьому випадку 710 ≈ 2π \cdot 113 + 0.00006028.
Нехай A = 710. Розглянемо послідовність
Значення елементів цієї послідовності дорівнюють
або з урахуванням періодичності ці значення еквівалентні
Функція на проміжку x ∈ [0; π/2] є зростаючою. Для того щоб послідовність вищезазначених дійсних чисел була монотонно зростаючою, достатньо виконання нерівності: n \cdot ɛ ≤ \pi / 2. Підставивши n = 10000 і ɛ = 0.00006028 отримаємо: 10000 \cdot 0.00006028 \le \pi / 2 або 0.6028 \le 1.57, що вірно. Таким чином, цим методом можна знайти 10^4 потрібних цілих чисел.
Реалізація алгоритму
Читаємо вхідне значення .
scanf("%d", &n);На відрізку знаходимо таке натуральне число , для якого при представленні у вигляді A = 2πk + ɛ значення буде найменшим.
bestA = 0;
bestE = 2 * PI;
for (a = 1; a < 1000; a++)
{
e = fmod(a, 2.0 * PI);
if (e < bestE)
{
bestE = e;
bestA = a;
}
}Значення x = bestA буде дорівнювати .
x = bestA;Виводимо шукану послідовність: 0 \cdot 710, 1 \cdot 710, 2 \cdot 710, ..., (n - 1) \cdot 710.
for (i = 0; i < n; i++)
printf("%d ", x * i);
printf("\n");