链接:https://www.nowcoder.com/acm/contest/185/D
来源:牛客网
题目描述
Johnson和Nancy要在星光下吃晚餐。这是一件很浪漫的事情。
为了增加星光晚餐那浪漫的氛围,他拿出了一个神奇的魔法棒,并且可以按照一定的规则,改变天上星星的亮暗。
Johnson想考考Nancy,在他挥动魔法棒后,会有多少颗星星依旧闪耀在天空。他知道,Nancy一定会一口说出答案。
Nancy当然知道怎么做啦,但她想考考你!
Johnson先将天上n个星星排成一排,起初它们都是暗的。
他告诉他的妹子,他将挥动n次魔法棒,第i次挥动会将编号为i的正整数倍的星星的亮暗反转,即亮的星星转暗,暗的星星转亮。
Johnson想问Nancy,最终会有多少个星星依旧闪亮在天空。
输入描述:
一个整数n,含义请见题目描述。
输出描述:
一个整数ans,即n次操作后会有多少个星星依旧闪亮。
示例1
输入
3
输出
1
示例2
输入
7
输出
2
备注:
对于60%的数据:n≤2×106 对于100%的数据:n≤1018
我们首先用下面这个程序来打个表:
#include
#include
using namespace std;
int main()
{
int a[1000];
int n=3,m,j,k,i,T;
for (n=1;n<=50;n++)
{
int ans=0;
memset(a,0,sizeof(a));
for (i=1;i<=n;i++)
{
for (j=i;j<=n;j++)
{
if (j%i==0)
{
a[j]==1?a[j]=0: a[j]=1;
}
}
}
for (i=1;i<=n;i++)
ans += a[i];
cout<<"n = "<
结果是这样的:
n = 1:1
n = 2:1
n = 3:1
n = 4:2
n = 5:2
n = 6:2
n = 7:2
n = 8:2
n = 9:3
n = 10:3
n = 11:3
n = 12:3
n = 13:3
n = 14:3
n = 15:3
n = 16:4
n = 17:4
n = 18:4
n = 19:4
n = 20:4
n = 21:4
n = 22:4
n = 23:4
n = 24:4
n = 25:5
n = 26:5
n = 27:5
n = 28:5
n = 29:5
n = 30:5
n = 31:5
n = 32:5
n = 33:5
n = 34:5
n = 35:5
n = 36:6
n = 37:6
n = 38:6
n = 39:6
n = 40:6
n = 41:6
n = 42:6
n = 43:6
n = 44:6
n = 45:6
n = 46:6
n = 47:6
n = 48:6
n = 49:7
n = 50:7
所以由此得出规律:
#include
#include
using namespace std;
int main()
{
long long n,m,j,i,T;
cin>>n;
cout<<(long long)sqrt(n)<