为什么 int 改 long long 能让 TLE -> AC
查看原帖
为什么 int 改 long long 能让 TLE -> AC
552286
流光萤影楼主2025/1/20 10:24

TLE 代码:

#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代码:

#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 吧(?

2025/1/20 10:24
加载中...