0
已解决
本渣渣超时代码
#include<iostream>
#include<algorithm>
#include<cstdio>//头文件
#include<string>
using namespace std;
long long a;
int main(){
long long x,y;
cin>>x>>y;
for(int i=x+1;i<=y-1;i++){
int c=0;
for(int j=2;j<=i-1;j++){
if(i%j==0){
c++;
}
}
if(c==0)
a++;
}
cout<<a;
return 0;
}
求大神找错!!!
曹博扬在2020-07-02 16:17:42追加了内容
还有这题
20分超时
#include<iostream>
#include<algorithm>
#include<cstdio>//头文件
#include<string>
using namespace std;
int main(){
int t,n,x=2;
cin>>t;
int s;
for(int i=1;i<=t;i++){
s=-1;
x=2;
cin>>n;
for(int j=2;j<=n;j++){
if(j%x==0){
s-=j;
x*=2;
}
else{
s+=j;
}
}
cout<<s<<endl;//1
}
return 0;
}
顶一下
曹博扬在2020-07-02 16:19:43追加了内容
第一个是1586
第二个是5230
0
已采纳
思路:
其实就是先从1到n循环
第一次,如果遇到这个数是2,那么这个数不累加,反而要减
同时,将这个数乘2的积保存
之后的每次循环,都要判断这个数是否是上个保存的数
如果是,那就不累加反而减
如此最后的和还不会超时
PS:不是说好互关吗?我关了,你呢?
0
首先,区间[x,y)表示的是>=x且<y,你的理解有问题。
然后,中间的判断素数,如果找到因数了,就应该直接退出当前循环(break),可以节省时间。
但是就是这样也只有40分(TLE,超时),所以建议先打牢基础再来做这道题。
0
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
bool o;
int main(){
long long x,y,z=0;
cin>>x>>y;
for(int i=x;i<y;i++){
o=true;
for(int j=2;j<i;j++){
if(i%j==0){
o=0;
break;
}
}
if(o)z++;
}
cout<<z;
}
1586
1586:质数质数
Time Limit Exceeded:10分代码共享
朱瑾文的测评结果:
测试点
结果
时间
1
Time Limit Exceeded
2000ms
偷看一下数据
2
Time Limit Exceeded
1992ms
偷看一下数据
3
Time Limit Exceeded
1992ms
偷看一下数据
4
Accepted
104ms
偷看一下数据
5
Time Limit Exceeded
2004ms
偷看一下数据
6
Time Limit Exceeded
1996ms
偷看一下数据
7
Time Limit Exceeded
1984ms
偷看一下数据
8
Time Limit Exceeded
2028ms
偷看一下数据
9
Time Limit Exceeded
2000ms
偷看一下数据
10
Time Limit Exceeded
2000ms
偷看一下数据
我的提交(cpp):
#include<iostream>#include<algorithm>#include<string>using namespace std;bool o;int main(){long long x,y,z=0;cin>>x>>y;for(int i=x;i<y;i++){o=true;for(int j=2;j<i;j++){if(i%j==0){o=0;break;}}if(o)z++;}cout<<z;return 0;}
