6 votos

$f(n)=$ cuantas veces número $2$ aparece en números de $1$ $n$

$f(n)$ calcula cuántas veces $2$ aparece en los números de$1$$n$. Por ejemplo, $f(1)=0$, $f(2)=1$ y $f(12)=2$.

¿Cuál es el primer $n$ que $f(n)=n$?

Me gustaría necesidad de averiguar la función en sí, si usted me puede ayudar. Y también el resultado, así que puedo comparar después voy a resolver la función de mí mismo.

Por favor me ayudan con esto, estoy atascado. Traté de hacerlo a través de MS Excel, pero el número es demasiado grande para lo que Excel puede controlar. Cualquier ayuda es muy apreciada.

Gracias!

p.s: gracias a Sidd, ahora tengo una respuesta. Sin embargo, si alguien puede averiguar a que la función matemática para esto, sería muy útil.

4voto

Ruben Puntos 584

Si usted tiene un número del tipo $6387$, entonces en vez de hacer $f(6387)$ puede hacer $f(6000) + f(300) + f(80) + f(7)$. Para cualquier $n$ en forma de $a*10^b$ donde $a,b \in \mathbb{Z}$,

$f(n) =\begin{cases} ab*10^{b-1} + 10^b & \text{:%#%#%} \\ ab*10^{b-1} + (n \bmod 10^b) + 1 & \text{:%#%#%} \\ ab*10^{b-1} & \text{:%#%#%} \\ 1 & \text{:%#%#%} \\ 0 & \text{:%#%#%} \\ \end{casos} $b\ge1, a\gt2$ 6000 $b\ge1, a=2$2 $b\ge1, a=1$4 $b=0, a\ge2$6 $b=0, a\lt2$ 10 $

For an explanation on how that equation works, take the number $10 $. If you put a $6 * 10 * 10 = 600 $ in the units place (_ _ _ 2), then for all $2 $ digit numbers, $ 600 * 3 $ numbers can occupy the first spot, $2 $ the second, and $ 10 * 10 * 10 $ the third. $ 1800 + 1000 = 2800 $. The $ 28263827$.

import java.io.File;

import java.io.PrintWriter;

public class test {
    public static long count = 0;

    public static void main(String[] args) {
        long i = 1;
        find(i);
        while (i != count) {
            if(i%100000==0){
                System.out.println(i + ":" + count);
            }

            i++;
            find(i);
        }

        System.out.println(i);
    }

    public static void find(long s) {
        String s2 = Long.toString(s);
        char[] chars = s2.toCharArray();

        for (char c : chars) {
            if (c == '2')
                count++;
        }
    }
}

1voto

runeh Puntos 1304

En cada bloque de 10 números hay un '2' en las unidades de lugar. Así que contando los dos en las unidades de lugar da aprox $\frac n {10}$.

En cada bloque de 100 números, hay 10 '2 en el 10 lugar. Así que para suficientemente grande $n$ hay aproximadamente $\frac n {10}$ '2 en el lugar de las decenas.

En el momento de llegar a 10 coloca el valor de la función se acerca a $n$, y crece más alto de lo que esta.

El '2 en cada lugar vienen en bloques, y la especificación de la función con la suficiente precisión para obtener la respuesta precisa para la primera igualdad tener cierto cuidado. Pero a partir de aquí el proceso para hacerlo debe ser claro.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X