程序逻辑感觉没什么问题了,测试样例也能过,但是只有80分,还有个测试点过不了

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

【题目描述】
首先所有的灯都是关的(注意是关!),编号为 111 的人走过来,把是 111 的倍数的灯全部打开,编号为 222 的人把是 222 的倍数的灯全部关上,编号为 333 的人又把是 333 的倍数的灯开的关上,关的开起来……直到第NN 个人为止。

给定 N,求 N轮之后,还有哪几盏是开着的
【输入】
一个数 N,表示灯的个数和操作的轮数
【输出】
若干数,表示开着的电灯编号
【输入样例】
5
【输出样例】
1 4

问题相关代码,请勿粘贴截图
#include<iostream>
using namespace std;
int main(){
    int n,f;
    cin >> n;
    for (int i=1;i<=n;i++){
        f = 0;
        for(int j=1;j<=n;j++){
            if(i%j == 0){
                f = !f;
            }
        }
        if(f){
            cout << i << " ";
        }
    } 
    return 0;
}
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

这题其实是数学题,不然会爆时间,结果为小于n的完全平方数

首先考虑输入输出是否符合要求,
其次考虑输入值得范围,与程序复杂度的要求。你的代码是O(N^2),其实可以写成O(N)

过不了是什么原因?答案错误还是超时还是格式错误?