所谓翻牌,就是将原来正面朝上的牌翻过来变成背面朝上,原来背面朝上的牌翻过来变成正面朝上。
现在有 n 张扑克牌正面朝上一字排开摊在桌面上,依次编号为 1、2、…、n。首先对 2 的倍数翻牌,再对 3 的倍数翻牌,接下来对 4、5、……、n 的倍数翻牌。
请问最后哪些牌正面朝上。
输入格式
扑克牌张数 n (0<n≤10000)
输出格式
正面朝上牌的编号(以空格间隔)
输入样例
5
输出样例
1 4
源代码
#include <iostream>
using namespace std;
const int N = 1000000+10;
int a[N]={0};
int main()
{int n;cin>>n;for(int i = 1;i <= n;i ++ ){for(int j = 2;j <= n;j ++ ){if(i%j==0){if(a[i]==0)a[i]++;else if(a[i]==1)a[i]--;}}}int flag=0;for(int i = 1;i <= n;i ++ ){if(a[i]==0){if(flag==0){flag=1;cout<<i;}else cout<<" "<<i;}}return 0;
}