社区讨论

为什么 int 改 long long 能让 TLE -> AC

UVA10140Prime Distance参与者 3已保存回复 6

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
6 条
当前快照
1 份
快照标识符
@m64fdi5k
此快照首次捕获于
2025/01/20 10:26
去年
此快照最后确认于
2025/11/04 11:14
4 个月前
查看原帖
TLE 代码:
CPP
#include<bits/stdc++.h>
using namespace std;
bitset<100005> flag;
vector<int> prime;
int l,r;
void isprime()
{
	flag[0] = flag[1] = 1;
	for(int i(2);i <= 100000;++i)
	{
		if(!flag[i]) prime.emplace_back(i);
		for(int j:prime)
		{
			if(i*j > 100000) break;
			flag[i*j] = 1;
			if(!(i%j)) break;
		}
	}
}
int main()
{
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);isprime();
	while(cin >> l >> r)
	{
		vector<int> p;
		for(int i(l);i <= r;++i)
		{
			int f(1);
			for(int j:prime)
			{
				if(1ll*j*j > i) break;
				if(!(i%j))
				{
					f = 0;
					break;
				}
			}
			if(f && i != 1) p.emplace_back(i);
		}
		if(p.size() <= 1) cout << "There are no adjacent primes.\n";
		else
		{
			int maxx(0),minn(1e6+1),pmax1,pmax2,pmin1,pmin2;
			for(int i(1);i < p.size();++i)
			{
				if(p[i]-p[i-1] > maxx) maxx = p[i]-p[i-1],pmax1 = p[i-1],pmax2 = p[i];
				if(p[i]-p[i-1] < minn) minn = p[i]-p[i-1],pmin1 = p[i-1],pmin2 = p[i];
			}
			cout << pmin1 << "," << pmin2 << " are closest, " << pmax1 << "," << pmax2 << " are most distant.\n";
		}
	}
}
AC代码:
CPP
#include<bits/stdc++.h>
using namespace std;
bitset<100005> flag;
vector<int> prime;
long long l,r;
void isprime()
{
	flag[0] = flag[1] = 1;
	for(int i(2);i <= 100000;++i)
	{
		if(!flag[i]) prime.emplace_back(i);
		for(int j:prime)
		{
			if(i*j > 100000) break;
			flag[i*j] = 1;
			if(!(i%j)) break;
		}
	}
}
int main()
{
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);isprime();
	while(cin >> l >> r)
	{
		vector<int> p;
		for(long long i(l);i <= r;++i)
		{
			int f(1);
			for(int j:prime)
			{
				if(1ll*j*j > i) break;
				if(!(i%j))
				{
					f = 0;
					break;
				}
			}
			if(f && i != 1) p.emplace_back(i);
		}
		if(p.size() <= 1) cout << "There are no adjacent primes.\n";
		else
		{
			int maxx(0),minn(1e6+1),pmax1,pmax2,pmin1,pmin2;
			for(int i(1);i < p.size();++i)
			{
				if(p[i]-p[i-1] > maxx) maxx = p[i]-p[i-1],pmax1 = p[i-1],pmax2 = p[i];
				if(p[i]-p[i-1] < minn) minn = p[i]-p[i-1],pmin1 = p[i-1],pmin2 = p[i];
			}
			cout << pmin1 << "," << pmin2 << " are closest, " << pmax1 << "," << pmax2 << " are most distant.\n";
		}
	}
}
为什么将 ll , rr, 和遍历区间的 ii 改为 long long 变量能让 TLE -> AC,rr 的范围也没爆 long long 吧(?

回复

6 条回复,欢迎继续交流。

正在加载回复...