POJ_1218_THE DRUNK JAILER

来源:互联网 发布:淘宝文案格式 编辑:程序博客网 时间:2024/05/22 06:42

Description

A certain prison contains a long hall of n cells, each right next to each other. Each cell has a prisoner in it, and each cell is locked.
One night, the jailer gets bored and decides to play a game. For round 1 of the game, he takes a drink of whiskey,and then runs down the hall unlocking each cell. For round 2, he takes a drink of whiskey, and then runs down the
hall locking every other cell (cells 2, 4, 6, ?). For round 3, he takes a drink of whiskey, and then runs down the hall. He visits every third cell (cells 3, 6, 9, ?). If the cell is locked, he unlocks it; if it is unlocked, he locks it. He
repeats this for n rounds, takes a final drink, and passes out.
Some number of prisoners, possibly zero, realizes that their cells are unlocked and the jailer is incapacitated. They immediately escape.
Given the number of cells, determine how many prisoners escape jail.

Input

The first line of input contains a single positive integer. This is the number of lines that follow. Each of the following lines contains a single integer between 5 and 100, inclusive, which is the number of cells n.

Output

For each line, you must print out the number of prisoners that escape when the prison has n cells.

Sample Input

25100

Sample Output

210

Source

Greater New York 2002

POJ


经研究表明。。。一个cell被开关的次数其实就是它的约数的个数,而只有有奇数个约数的cell最后才会被关闭。又只有完全平方数才会有奇数个数的约数(这种简单的问题不要问为什么。。),所以这题就转变成求n个数中的完全开平方数的个数。。。(这么睿智的想法不是我自己想出来的,是看了某巨巨博客才发现的好方法。代码如下~)

代码

#include <iostream>#include <cmath>using namespace std;int main(){    ios::sync_with_stdio(false);    int t,n;    cin>>t;    while(t--)    {        cin>>n;        cout<<(int)sqrt(1.0*n)<<endl;//以前一直直接sqrt(n),到今天才发现这样写是错的。。。真不知道以前那些题是怎么水过去的。。    }    return 0;}


0 0
原创粉丝点击