$o(logn)$的疑惑
  • 板块学术版
  • 楼主2345A
  • 当前回复25
  • 已保存回复26
  • 发布时间2024/4/30 15:41
  • 上次更新2024/4/30 19:30:53
查看原帖
$o(logn)$的疑惑
565070
2345A楼主2024/4/30 15:41

题目:

简单题

题目描述

求一个数是否是二的整数次幂,如果是,输出YES,否者输出NO

输入格式

一行,一个正整数nn

输出格式

一串字符串,表示是否符合条件

样例 #1

样例输入 #1

4

样例输出 #1

YES

样例 #2

样例输入 #2

6

样例输出 #2

NO

提示

数据可能很大,请用时间复杂度为O(1)O(1)的代码通过

n≤1020n\le10^{20}

为什么我用o(logn)o(logn)和用o(n)o(n)都是700ms,超时了。

不过这道题是我出的,我当然想让别人tle

我主要是不知道为什么两种方式用时是一样的:

o(n)

#include<bits/stdc++.h>
using namespace std;
int main()
{
	long long n;
	long long ans=1;
	cin>>n;
	while(1)
	{
		if(ans>n)
		break;
		if(ans==n)
		{
			cout<<"YES\n";
			return 0;
		}
		ans*=2;
	}
	cout<<"NO";
	return 0;
}

o(logn)

#include<bits/stdc++.h>
using namespace std;
int main()
{
	long long n;
	cin>>n;
	long long ans=sqrt(n);
	while(1)
	{
		if(ans>n)
		break;
		if(ans==n)
		{
			cout<<"YES\n";
			return 0;
		}
		ans<<=1;
	}
	cout<<"NO";
	return 0;
}
2024/4/30 15:41
加载中...