惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Check Point Blog
J
Java Code Geeks
H
Hackread – Cybersecurity News, Data Breaches, AI and More
D
Docker
腾讯CDC
The GitHub Blog
The GitHub Blog
大猫的无限游戏
大猫的无限游戏
Microsoft Security Blog
Microsoft Security Blog
GbyAI
GbyAI
Stack Overflow Blog
Stack Overflow Blog
博客园 - 司徒正美
T
The Blog of Author Tim Ferriss
Vercel News
Vercel News
P
Proofpoint News Feed
雷峰网
雷峰网
博客园_首页
B
Blog RSS Feed
Microsoft Azure Blog
Microsoft Azure Blog
爱范儿
爱范儿
V
V2EX
F
Fortinet All Blogs
酷 壳 – CoolShell
酷 壳 – CoolShell
MyScale Blog
MyScale Blog
S
SegmentFault 最新的问题

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
The Ultimate Python Logic Journey: Chocolates -> Divisors...
Kathirvel S · 2026-05-29 · via DEV Community
Cover image for The Ultimate Python Logic Journey: Chocolates -> Divisors -> Primes

Kathirvel S

Imagine this...

You walk into a shop and buy 30 chocolates. 🍫

Your friend looks at the chocolates and asks:

“Can we divide these chocolates equally among people without breaking any chocolate?”

Interesting question, right?

So now we start thinking...

  • Can 1 person take all 30 chocolates?
  • Can 2 people share equally?
  • What about 3?
  • 4?
  • 5?
  • 6?

Suddenly... mathematics enters the story.

And that is where the beautiful idea of Divisors begins.


Step 1: Understanding Divisors Using Chocolates

We have:

30 chocolates

Now let’s check who can divide them equally.

If a number divides 30 completely with no remainder, then it is called a divisor (or factor) of 30.

These are the divisors of 30:

1 2 3 5 6 10 15 30

Because:

  • 30 ÷ 1 = 30
  • 30 ÷ 2 = 15
  • 30 ÷ 3 = 10
  • 30 ÷ 5 = 6

No remainder anywhere.


The Secret Weapon: % Modulus Operator

In Python:

30 % 2

means:

“What remainder is left when 30 is divided by 2?”

If the answer is:

0

then division happened perfectly.

That means:

2 is a divisor of 30


Step 2: Checking Divisors Manually

At first, beginners usually think like this:

if 30%1 == 0:
    print(1)

if 30%2 == 0:
    print(2)

if 30%3 == 0:
    print(3)

if 30%4 == 0:
    print(4)

if 30%5 == 0:
    print(5)

if 30%6 == 0:
    print(6)

if 30%7 == 0:
    print(7)

if 30%8 == 0:
    print(8)


Let’s Understand This Deeply

Take this line:

if 30%2 == 0:
    print(2)

Here’s what happens internally:

Step-by-step Thinking

  1. Divide 30 by 2
  2. Check the remainder
  3. If remainder is 0
  4. Then print 2

Because 30 divides perfectly by 2.


Flowchart

        Start
           |
           v
     Check 30 % 2
           |
     Is remainder 0?
        /       \
      Yes       No
      /           \
Print 2        Ignore
      \
       v
       End


But Wait... This Feels Repetitive

Imagine checking till 1000 manually.

Impossible!

So programmers start asking smarter questions:

“Can the computer repeat the work for us?”

And that leads us to loops.


Step 3: Reducing Repetition

Instead of writing many if statements:

div = 1

if 30%div == 0:
    print(div)

div+=1

if 30%div == 0:
    print(div)

div+=1

if 30%div == 0:
    print(div)

div+=1

Now we introduced a variable:

div

which means:

“Current divisor we are checking.”


What is Happening Here?

Initially:

div = 1

Then:

30 % div

checks whether current divisor divides 30 perfectly.

After checking:

div += 1

moves to the next divisor.

This is already smarter than writing everything manually.

But still repetitive.


Step 4: The Power of While Loop

Now comes the real programming mindset.

no = 30
div = 1

while div <= no:
    if no % div == 0:
        print(div)

    div += 1


Let’s Build the Logic Slowly

We are saying:

“Start divisor from 1 and keep checking till 30.”


Detailed Breakdown

Line 1

no = 30

The number whose divisors we want.


Line 2

div = 1

We begin checking from divisor 1.


Line 3

while div <= no:

Meaning:

“Keep running until divisor becomes greater than 30.”


Inside the Loop

if no % div == 0:

Check whether divisor divides the number perfectly.


If True

print(div)

Print the divisor.


Move Forward

div += 1

Go to next divisor.


Flowchart

           Start
              |
              v
          no = 30
          div = 1
              |
              v
       Is div <= no ?
          /       \
        Yes        No
         |          |
         v          v
   Check no % div   End
         |
   Is remainder 0?
      /       \
    Yes        No
     |          |
Print div       |
      \         /
       v       v
       div += 1
           |
           v
      Repeat Loop


Output

1
2
3
5
6
10
15
30

Beautiful.

The computer found all divisors automatically.


Step 5: Can We Make It Faster?

Suppose:

no = 10000

Do we really need to check till 10000?

Actually no.

Because:

A number cannot have divisors greater than half of itself (except the number itself).

So we optimize.


Optimized Version

no = 10000
div = 2

while div <= no//2:
    if no % div == 0:
        print(div)

    div += 1


Why Start From 2?

Because:

  • 1 is always a divisor
  • number itself is always a divisor

We are searching for divisors in between.


Why no//2?

Because no number larger than half can divide the number evenly.

For example:

Can 20 divide 30?

No.

So checking after 15 is useless.

This saves time.

This is called:

Optimization

A very important programming skill.


Flowchart

      Start
         |
         v
    no = 10000
    div = 2
         |
         v
 Is div <= no//2 ?
      /         \
    Yes          No
     |            |
     v            v
Check no % div    End
     |
Is remainder 0?
   /      \
 Yes      No
  |        |
Print div  |
    \      /
     v    v
    div += 1
        |
        v
    Repeat


Step 6: Counting Divisors Instead of Printing

Now a new idea comes.

Instead of printing divisors...

What if we count them?


Code

no = 30
div = 2
count = 0

while div <= no//2:
    if no % div == 0:
        count += 1

    div += 1

print("Count of Divisors", count)


Deep Understanding

Variable count

This stores:

“How many divisors we found.”

Initially:

count = 0

Whenever divisor is found:

count += 1

means:

count = count + 1


Let’s Trace It

For 30:

Divisors between 2 and 15 are:

2 3 5 6 10 15

Total:

6

So output becomes:

Count of Divisors 6


Flowchart

        Start
           |
           v
      count = 0
           |
           v
   Check divisors
           |
    Divisor found?
        /      \
      Yes       No
       |
 count += 1
       |
       v
 Continue Loop
       |
       v
 Print count


Step 7: The Birth of Prime Numbers

Now comes the magical idea.

A prime number is:

A number that has NO divisors except 1 and itself.

Examples:

2 3 5 7 11 13 17


Let’s Test 31

no = 31
div = 2
count = 0

while div <= no//2:
    if no % div == 0:
        count += 1

    div += 1

if count == 0:
    print(no, 'is a prime number')


The Core Idea

We search for divisors between:

2 to no//2

If we find none...

Then the number is prime.


Why Does This Work?

For 31:

  • 31 % 2 → not 0
  • 31 % 3 → not 0
  • 31 % 4 → not 0

...

No divisor found.

So:

count == 0

Which means:

31 is a prime number


Flowchart

          Start
             |
             v
        count = 0
             |
             v
      Check divisors
             |
      Any divisor found?
          /        \
        Yes         No
        |            |
   count += 1        |
         \           /
          v         v
       Loop Ends
             |
             v
      Is count == 0 ?
          /       \
        Yes        No
         |          |
 Print Prime      Not Prime


Special Fact

The One and Only Even Prime Number is 2

Why?

Because every other even number is divisible by 2.

But 2 itself has only:

1 and 2

as divisors.

So it is prime.


Final Big Idea

Everything started with chocolates.

Then we learned:

Chocolate Sharing
        ↓
Divisors
        ↓
Finding Divisors
        ↓
Counting Divisors
        ↓
Prime Numbers

This is how programming should be learned.

Not by memorizing code.

But by:

  • Asking questions
  • Building logic slowly
  • Thinking like a problem solver

Final Thought

Whenever you see a prime number problem now...

Don’t think:

“Oh no, math!”

Instead think:

“Can this number share chocolates equally with anyone?”

And suddenly...

Prime numbers become simple.