谁能帮忙讲一下这题他是怎么优化时间复杂度的

冷眼观world 2019-11-11 12:01:41
想问一下那个n没有定义大小,后面怎么循环呢,还有init函数的意义是什么 代码如下: #include<bits/stdc++.h>
using namespace std;
int s[10000],n;
int is_prime(int t)
{
for(int i=2;i*i<=t;i++)
if(t%i==0)return 0;
return 1;
}
void init()
{
for(int i=2;i<10000;i++)
if(is_prime(i))
s[n++]=i;
}
int main()
{
init();
int t;
cin>>t;
while(t--)
{
int ans=0;
int x;
cin>>x;
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
if(x==s[i]+s[j])
ans++;
cout<<ans<<endl;
}
return 0;
}
...全文
63 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Wayward:) 2019-11-11
  • 打赏
  • 举报
回复
在所有函数外申明的变量一般会初始化为0,不过不要抱有这种假设。 它是先将所有可能的素数算出来,这两在遍历的时候不用重新判断素数, 当然,还可以进一步优化吧。 比如用素数筛选选素数,再找素数因子的时候,如果一个素数因子已经大于n了,则没必要再找了。
铖邑 2019-11-11
  • 打赏
  • 举报
回复
n可能会被 初始化为0,但是写程序不要去做这种假设,加上=0就多两个字符而已,费你一秒钟的事情吗?
冷眼观world 2019-11-11
  • 打赏
  • 举报
回复
引用 2 楼 Philomath丶的回复:
在所有函数外申明的变量一般会初始化为0,不过不要抱有这种假设。 它是先将所有可能的素数算出来,这两在遍历的时候不用重新判断素数, 当然,还可以进一步优化吧。 比如用素数筛选选素数,再找素数因子的时候,如果一个素数因子已经大于n了,则没必要再找了。
懂了 谢谢///////////

64,647

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧