### Apache Airflow version

2.6.1

### What happened

Sensor is fired with an exception ZeroDivisionError, if set up `mode="reschedule"`, `exponential_backoff=True` and `poke_interval=1` 

```
ERROR - Task failed with exception
Traceback (most recent call last):
  File "/home/airflow/.local/lib/python3.9/site-packages/airflow/sensors/base.py", line 244, in execute
    next_poke_interval = self._get_next_poke_interval(started_at, run_duration, try_number)
  File "/home/airflow/.local/lib/python3.9/site-packages/airflow/sensors/base.py", line 274, in _get_next_poke_interval
    modded_hash = min_backoff + run_hash % min_backoff
ZeroDivisionError: integer division or modulo by zero
```

### What you think should happen instead

Throw an human-readable exception about corner values for `poke_interval` or allow to set up this value less then 2 (if it's `>=` 2 - rescheduling works fine.)

### How to reproduce

```
from airflow.sensors.base import BaseSensorOperator
from airflow import DAG
import datetime

class TestSensor(BaseSensorOperator):
    def poke(self, context):
        return False

with DAG("test_dag", start_date=datetime.datetime.today(), schedule=None):
    sensor = TestSensor(task_id="sensor", mode="reschedule", poke_interval=1, exponential_backoff=True, max_wait=5)
```

### Operating System

Debian GNU/Linux 10 (buster)

### Versions of Apache Airflow Providers

_No response_

### Deployment

Docker-Compose

### Deployment details

_No response_

### Anything else

_No response_

### Are you willing to submit PR?

- [X] Yes I am willing to submit a PR!

### Code of Conduct

- [X] I agree to follow this project's [Code of Conduct](https://github.com/apache/airflow/blob/main/CODE_OF_CONDUCT.md)

)
from airflow.executors.executor_loader import ExecutorLoader
from airflow.models.baseoperator import BaseOperator
from airflow.models.skipmixin import SkipMixin
from airflow.models.taskreschedule import TaskReschedule
from airflow.ti_deps.deps.ready_to_reschedule import ReadyToRescheduleDep
from airflow.utils import timezone
from airflow.utils.context import Context
from airflow.utils.decorators import apply_defaults  
_MYSQL_TIMESTAMP_MAX = datetime.datetime(2038, 1, 19, 3, 14, 7, tzinfo=timezone.utc)
@functools.lru_cache(maxsize=None)
def _is_metadatabase_mysql() -> bool:
    if settings.engine is None:
        raise AirflowException("Must initialize ORM first")
    return settings.engine.url.get_backend_name() == "mysql"
class PokeReturnValue:
    """
    Optional return value for poke methods.
    Sensors can optionally return an instance of the PokeReturnValue class in the poke method.
    If an XCom value is supplied when the sensor is done, then the XCom value will be
    pushed through the operator return value.
    :param is_done: Set to true to indicate the sensor can stop poking.
    :param xcom_value: An optional XCOM value to be returned by the operator.
    """
    def __init__(self, is_done: bool, xcom_value: Any | None = None) -> None:
        self.xcom_value = xcom_value
        self.is_done = is_done
    def __bool__(self) -> bool:
        return self.is_done
class BaseSensorOperator(BaseOperator, SkipMixin):