C++生日重复问题仿真方法代码疑问

问题遇到的现象和发生背景

假设一个班级有50名同学,每个同学都报出自己的生日, 每个同学的生日都不相重的概率只有0.0296,如果有100个同学,不相重的概率为3.072510-7。相重复的概率如此之大与我们主观想象不同。写一个程序,输入同学的人数n,利用统计方法计算出其生日不重复的概率。然后再用彷真的方法, 利用随机数产生每个同学的生日,计算出生日不重复的概率并与前面的结果进行比较。
学生的生日可以用随机函数rand()产生,调用rand()前首先调用srand(long int *)函数设置种子,以上函数需要包含头文件 stdlib.h。

代码里这句看不懂:for(j=1;j<i&&j<=NUM;j++)
为什么要j<i这个条件?我理解i是实验次数,j是人数,应该是独立的啊?
如能再详细的讲一下仿真方法的思路就更好了,谢谢!

问题相关代码,请勿粘贴截图
#include<iostream>
#include<ctime>
#define NUM 50
using namespace std;
int main()
{
  int i,j;
  double probability=1;
  for(i=1;i<=NUM;i++)
    probability=probability*((365+1-i)/365.0);
  cout<<"统计方法:"<<probability;
  //以下为仿真方法
  int total=100000;   //采样次数
  int duplicateNumber=0;
  int a[366]={0};         //存放生日,放于a[1]到a[365],值为1。
  int temp;
  srand(time(0));
  for(i=1;i<=total;i++)
  {
    for(j=1;j<i&&j<=NUM;j++)
    {
      temp=rand()%365+1;
      if(a[temp])
      {
         duplicateNumber++;break; 
      }
      else
          a[temp]=1;
    }
    for(j=1;j<=365;j++)
        a[j]=0;
  }
  cout<<"仿真方法:"<<(double)(total-duplicateNumber)/total;
}

运行结果

统计方法:0.0296264仿真方法:0.03033
C:\Users\USER\source\repos\test_20211203\Debug\test_20211203.exe (进程 5196)已退出,代码为 0。
按任意键关闭此窗口. . .

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


本次提问扣除的有问必答次数,已经为您补发到账户,我们后续会持续优化,扩大我们的服务范围,为您带来更好地服务。