int flag = 1;
while (N--) {
cin >> i;
for (int cnt = 2; cnt < i/2+1; cnt++) {
if (i % cnt == 0) { flag = 0; break; }
}
if (!flag == 0) { sum += i; flag = 1; } // flag 僅在素數分支重置
}
遇到合數時 flag=0,若不進入 if (!flag==0) 分支,flag 永遠為 0,導致後續所有數字(包括素數)判斷失敗。
while (N--) {
cin >> i;
int flag = 1; // 移入循環內部,每次重置
for (int cnt = 2; cnt * cnt <= i; cnt++) { // 優化:sqrt(i)
if (i % cnt == 0) { flag = 0; break; }
}
if (flag && i > 1) sum += i; // 1 不是素數
}
cnt * cnt <= i 替代 i/2,複雜度從 O(N) 降為 O(√N)。