intmain(void){ int n,m; scanf("%d %d", &n,&m); int min = m+1; // 这样后面第一次执行就必然刷新min与max的值;同时,如果min的值不变,则意味着没有符合的兄弟数 int max = n-1; int amount_min = 2 * m; for (int i=m; i>n; --i) { for (int j=i-1; j>=n; --j) { if (i+j>max+min) break; // 由于最终结果一定是和最小的,因此若当前取的数对和大于“当前”兄弟数,则可以直接跳出循环 if ((i*j)%(i+j)==0) { int amount = i + j; // 基于前面的判断,此处amount必小于或等于amount_min if (amount == amount_min) { if (j<min) { min = j; max = i; amount_min = amount; } } else { amount_min = amount; min = j; max = i; } } } } if (min == m+1 && max == n-1) { printf("No"); } else { printf("%d %d %d", max, min, amount_min); } }