题目描述
在一所监狱里有一条长长的走廊,沿着走廊排列着 nn 个牢房,编号为 11 到 nn。每个牢房有一个囚犯,而且牢房的门都是锁着的。
一天晚上,狱卒很无聊,于是他就玩起了一个人的游戏。第一轮,他喝了一口威士忌,然后沿着走廊,将所有牢房的门打开。第二轮,他又喝了一口威士忌,然后又沿着走廊,将所有编号为 22 的倍数的牢房锁上。第三轮,他再喝一口威士忌,再沿着走廊,视察所有编号为 33 的倍数的牢房,如果牢房是锁着的,他就把它打开;如果牢房是开着的,他就把它锁上。他如此玩了nn 轮后,喝下最后一口威士忌,醉倒了。
当他醉倒后,一些犯人发现他们的牢房开着而且狱卒已经无能为力,他们立刻逃跑了。
给出牢房的数目 nn,请你确认最多有可能有多少犯人逃出了监狱?
输入格式
输入文件仅一行,为一个正整数 nn
输出格式
输入文件仅一行一个整数,为最多逃跑的犯人数。
输入数据 1
5
输出数据 1
2
数据范围
n≤10000n≤10000
题解
#include<bits/stdc++.h>
using namespace std;
int a[10001];
int main(){
int n,ans;
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(j%i==0){
if(a[j]==0) a[j]=1;
else a[j]=0;
}
}
}
ans=0;
for(int i=1;i<=n;i++){
if(a[i]==1) ans++;
}
cout<<ans<<endl;
}