我建表也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