我建表也TLE......
#include<bits/stdc++.h>
using namespace std;
int main(int argc, char** argv) {
cin.tie(0);
ios::sync_with_stdio(false);
int a[10000],b=1;
a[0]={2};
for(int c=3;c<10000;c++){
int e=0;
for(int d=0;a[d]<=sqrt(c);d++)
if(c%a[d]==0){
e=1;
break;
}
if(e==0){
a[b]=c;
b++;
}
}
int d,g,i;
while(cin>>d>>g&&g+d){
if(d>g)
swap(d,g);
i=g-d+1;
for(int h=d;h<=g;h++){
for(int e=0;e<10000;e++){
if(a[e]==0||h==a[e])
break;
else if(h%a[e]==0||a[e]>h){
i--;
break;
}
}
}
cout<<i<<'\n';
}
}
我也試過printf
也不行....
#include <cstdio>#include <cmath>using namespace std;int prime[10000]{2}, L = 1, a, b, ans, lim;bool flag;int main(){ for(int n = 3; n < 10000; ++n) { flag = true, lim = sqrt(n); for(int i = 0; prime[i] <= lim; ++i) if(n % prime[i] == 0) { flag = false; break; } if(flag) prime[L++] = n; } while(~scanf("%d %d", &a, &b) && (a | b)) { if(a > b) { puts("0"); continue; } ans = b - a + 1; for(int i = a; i <= b; ++i) for(int j = 0; j < 10000; ++j) if(i == prime[j] || prime[j] == 0) break; else if(i % prime[j] == 0 || prime[j] > i) { --ans; break; } printf("%d\n", ans); }}
測資有一個a > b的case,並不是原本題目希望的測資。詳細可以回去看以前的討論區。
#include #include using namespace std;int prime[10000]{2}, L = 1, a, b, ans, lim;bool flag;int main(){ for(int n = 3; n < 10000; ++n) { flag = true, lim = sqrt(n); for(int i = 0; prime[i] <= lim; ++i) if(n % prime[i] == 0) { flag = false; break; } if(flag) prime[L++] = n; } while(~scanf("%d %d", &a, &b) && (a | b)) { if(a > b) { puts("0"); continue; } ans = b - a + 1; for(int i = a; i <= b; ++i) for(int j = 0; j < 10000; ++j) if(i == prime[j] || prime[j] == 0) break; else if(i % prime[j] == 0 || prime[j] > i) { --ans; break; } printf("%d\n", ans); }}
測資有一個a > b的case,並不是原本題目希望的測資。詳細可以回去看以前的討論區。
我有考慮到
問題是出在速度.....
QAQ
#include #include using namespace std;int prime[10000]{2}, L = 1, a, b, ans, lim;bool flag;int main(){ for(int n = 3; n < 10000; ++n) { flag = true, lim = sqrt(n); for(int i = 0; prime[i] <= lim; ++i) if(n % prime[i] == 0) { flag = false; break; } if(flag) prime[L++] = n; } while(~scanf("%d %d", &a, &b) && (a | b)) { if(a > b) { puts("0"); continue; } ans = b - a + 1; for(int i = a; i <= b; ++i) for(int j = 0; j < 10000; ++j) if(i == prime[j] || prime[j] == 0) break; else if(i % prime[j] == 0 || prime[j] > i) { --ans; break; } printf("%d\n", ans); }}
測資有一個a > b的case,並不是原本題目希望的測資。詳細可以回去看以前的討論區。
我有考慮到
問題是出在速度.....
QAQ
#include <bits/stdc++.h> using namespace std; bool bang(long int kk) { int a=0, b; b=sqrt(kk); if(kk==1) { return false; } else { for (int num=2;num<=b;num++) { if (kk%num==0&&kk!=2) return false; } } return true; } int main() { cin.tie(0); ios::sync_with_stdio(false); long int a, b; while (cin >> a >> b) { long int d=0; while (1) { if (bang(a)==true) { d+=1; a+=1; } else { a+=1; } if (a==b+1) { break; } } cout << d << "\n"; } }
這樣跑所有測資,不知道會跑多久。QQ