c++求解素数个数。

输入两个正整数X和Y,输出两者之间的素数个数(包括X和Y)。
输入两个正整数X和Y,输出两者之间的素数个数(包括X和Y)。
1 100
25
这是代码:
#include<bits/stdc++.h>
using namespace std;
bool ss(int i)
{
if(i==1)return false;
int j;
for(j=2;j*j<=i;j++)
{
if(i%j==0)return false;
}
else return true;
}
int main(){
int x,y,a=0;
cin>>x>>y;
for(int i=x;i<=y;i++)
{
if(ss(i)==true)a++;

}
cout<<a;
return 0;
}
有人能一步步解释一下每一步的意思吗,不太懂求素数的方法

函数ss就是判断输入的i是否为素数
所谓素数,就是某个整数,不能被从2到该数-1之内所有整数整除的数
比如7,不能被2-6整除,所以是素数
比如15,能被3和5整除,所以不是素数
代码中循环为for(j=2;j*j<=i;j++)
这里用平方和小于i作为结束标志,比如9,如果逐个判断2-8是否能整除,就需要判断7次。但实际只需要判断2-3就可以了,因为4以后即使能整除9,那另一个除数肯定小于4,那么在之前的循环已经判断过了

首先,求素数是个数学问题
你必须能够在没有编程软件的情况下会求素数
然后才能利用程序实现自动化的求素数
那么什么是素数呢,就是除了1和它自身之外不能被其他数整除的数
而如果一个数n,它有因数m,那么n除以m一定是它的另一个因数,除非m=n/m,也就是m是n的开方
那么只要小于n的开方的所有数都不能整除,大于n的开方的所有数必然也不能整除
既然知道了这个,那么我们在利用程序来试一个数有没有因数的时候,就不需要从1到n的挨个除一遍
而只需要从2开始,到n的开方,一路除过去,如果都除不开,它一定就是个素数
你知道了这个,就能理解为什么要用j*j<=i,j的平方小于等于i,不就是j小于等于i的开方的另一种表达吗