Primorial 매직넘버로 소수 판정 가속하기 - 정직한 탐색기

# Primorial 매직넘버로 소수 판정 가속하기 - 정직한 탐색기 ## 시작은 단순한 호기심이었다 큰 소수를 빠르게 판별하는 방법을 연구하다가 이런 생각을 하게 됐다. > 작은 소수들의 곱(primorial)을 매직넘버로 쓰면 합성수를 빠르게 거를 수 있지 않을까? 그리고 그 매직넘버의 비트 패턴이 특별하면, 나눗셈을 shift 연산으로 대체할 수 있지 않을까? 이 호기심으로 시작한 탐색이 며칠간의 알고리즘 작성, 통계 분석, 벤치마크 측정으로 이어졌다. 결과는 일부는 성공이었고 일부는 솔직히 실패였다. 이 글은 그 과정을 정직하게 정리한 기록이다. ## 1단계: 1016비트 매직넘버 만들기 처음 시도한 것은 단순했다. ```python # 작은 소수 127개를 곱해서 1016비트 매직넘버 만들기 M = 2 × 3 × 5 × 7 × ... × (127번째 적절한 소수) ``` 이 매직넘버 M에 대해 후보 N의 합성수성을 검사하려면: ```python if gcd(N, M) > 1:     # N은 합성수 (M의 어떤 소인수로 나눠짐) ``` **측정 결과**: 91.42%의 합성수가 한 번의 gcd 연산으로 탈락. 이론적으로 Mertens의 정리가 예측한 값과 정확히 일치했다. **Mertens 3 정리**:  ``` ∏(p ≤ x) (1 - 1/p) ~ e^(-γ) / log(x) ``` x = 1000일 때 이 값은 약 0.0858. 즉 약 8.58%만 통과하고 91.42% 탈락. 측정값과 일치. 이 단계에서 알게 된 것: **매직넘버에 더 많은 소수를 추가해도 탈락률은 logarithmic하게만 증가한다**. 1000개 소수에서 10000개로 늘려도 탈락률은 91% → 95% 정도. 비용 대비 효과가 빠르게 감소. ## 2단계: 비트 패턴에 대한 잘못된 직관 매직넘버 M의 2진 표현을 보다가 가운데에 0이 31개 연속으로 나오는 패턴을 발견했다. ``` ...11111[00000000000000000000000000...

gitea / ubuntu linux 개발 환경 구축기

개발 환경 구축기 Gitea가 뭔가요 Gitea는 내 서버에 직접 설치해서 운영할 수 있는 Git 저장소 관리 도구입니다. GitHub처럼 코드를 올리고, 버전을 관리하고, 웹 UI로 파일을 둘러볼 수 있는데, 다른 점이 있다면 서버가 내 것이라는 겁니다. Go 언어로 만들어져서 가볍고 빠릅니다. 라즈베리파이에도 돌아갈 정도입니다. 왜 GitHub 말고 Gitea인가 GitHub도 Private 저장소를 무료로 제공합니다. 그러니까 보안 때문에 Gitea를 선택해야 한다는 건 아닙니다. 다만 이런 경우라면 Gitea가 맞습니다. 소스코드를 외부 서버에 올리기 싫을 때. 인터넷이 안 되는 환경에서 써야 할 때. 이미 서버가 있고 직접 관리하고 싶을 때. 이 세 가지 중 하나라도 해당된다면 Gitea를 선택하면 됩니다. 참고 개인 용도라면 GitHub 무료 플랜도 충분합니다. Private 저장소도 무제한이고 서버 관리를 안 해도 됩니다. 굳이 서버를 직접 관리하고 싶지 않다면 GitHub를 쓰세요. 설치 전 준비 이 글의 환경은 Ubuntu 20.04 LTS입니다. Docker 없이 바이너리를 직접 설치합니다. 먼저 OS 버전을 확인합니다. cat /etc/os-release 설치 과정 먼저 Gitea 전용 시스템 계정을 만듭니다. Gitea는 이 계정으로 실행됩니다. sudo adduser --system --shell /bin/bash \ --gecos 'Git Version Control' \ --group --disabled-password \ --home /home/git git 바이너리를 다운로드합니다. sudo wget -O /usr/local/bin/gitea \ https://dl.gitea.com/gitea/1.21.11/gitea-1.21.11-linux-amd64 su...

로컬 Gemma를 Claude Code 백엔드로 쓰기

로컬 Gemma를 Claude Code 백엔드로 쓰기 ollama 없이, 파이썬 FastAPI 서버만으로 Gemma를 띄우고 LAN의 어떤 PC에서든 Claude Code가 이를 백엔드로 사용하게 하는 방법입니다. 전체 구조 [Host PC - Windows] gemma_server.py (FastAPI + transformers) └─ /v1/messages ← Anthropic Messages API └─ port 8000 → LAN 전체 허용 ────────── LAN ────────── [Client - Windows / Linux] ANTHROPIC_BASE_URL = http://192.168.x.x:8000 claude → Gemma로 응답 ⚠️ 중요: Claude Code는 OpenAI 포맷( /chat/completions )이 아니라 Anthropic Messages API 포맷 ( /v1/messages )을 사용합니다. 1. 패키지 설치 pip install fastapi uvicorn transformers accelerate torch 2. 서버 코드 (gemma_server.py) import json, os, time, uuid from threading import Thread from typing import Optional import torch, uvicorn from fastapi import FastAPI from fastapi.responses import StreamingResponse from pydantic import BaseModel from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer MODEL_ID = os.environ.get("MODEL_ID", "google/gemma-3-4b-it") HF_TOKEN...

키움 API 를 이용한 자동매매 프로그램 개발 (삽질일기), KIWOOM REST API AUTO TRADING BOT

Python Kiwoom REST API 알고리즘 트레이딩 키움 REST API로 그리드 자동매매 봇 만들기 — 삽질 기록 v2.0부터 v3.4까지, 3주간의 개발 과정에서 겪은 오류와 해결법을 정리합니다. 2026-04-02 · TIGER KOSDAQ150 · Python 3 · Kiwoom REST API 목차 프로젝트 개요 및 아키텍처 핵심 매매 전략 — 그리드 + 연속 스트릭 삽질 1: API 파라미터가 문서랑 달랐다 삽질 2: Rate Limit — HTTP 429의 습격 삽질 3: 페이지네이션 없이 체결내역 집계했더니 수익이 반토막 삽질 4: 오버나이트 토큰 만료 — 매일 아침 봇이 죽는 이유 상태 복구 전략의 변천사 마무리: 지금 돌아가고 있는 구조 1. 프로젝트 개요 및 아키텍처 TIGER KOSDAQ150 ETF를 대상으로 그리드 방식의 자동매매 봇을 만들었다. 목표는 단순하다: 기준가 위아래에 매수/매도 주문을 4개 깔아두고, 체결이 발생하면 즉시 재정비한다. v2.0에서 완전히 새로 짠 구조는 다음과 같다. config.py 중앙 설정, .env 로드 kiwoom_api.py REST API 클라이언트 trader.py 핵심 매매 로직 main.py 진입점, 대시보드 서버 cancel_all.py 긴급 주문 취소 도구 .env API 자격증명 (gitignore) API 인증은 Bearer 토큰 방식이라 acnt_no / acnt_pwd 를 매 요청마다 넘길 필요가 없었다. 시뮬레이션(모의투자)은 헤더에 simulation-yn: "Y" 만 추가하면 된다. 2. 핵심 매매 전략 — 그리드 + 연속 스트릭 10초마다 폴링하며 아래 사이클을 반복한다. 매 사이클 (10s): 1. ka10075로 미체결 주문 수 조회 2. 주문 수 != 4이면: a...