#17914: ㄜ.....


ufve0704 (爬 我爬 我爬爬爬 有排行榜這種東西就是要爬 爬過我上面的那...)

學校 : 臺北市私立延平高級中學
編號 : 83268
來源 : [203.72.178.1]
最後登入時間 :
2023-10-30 13:02:50
a121. 質數又來囉 | From: [114.42.220.201] | 發表日期 : 2019-06-02 09:34

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

也不行....

 
#17918: Re:ㄜ.....


qqrainbow (愛蜜莉雅)

學校 : 國立嘉義高級中學
編號 : 83319
來源 : [36.238.5.68]
最後登入時間 :
2023-04-26 23:31:35
a121. 質數又來囉 | From: [122.121.161.243] | 發表日期 : 2019-06-02 16:22

#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,並不是原本題目希望的測資。詳細可以回去看以前的討論區。

 
#17920: Re:ㄜ.....


ufve0704 (爬 我爬 我爬爬爬 有排行榜這種東西就是要爬 爬過我上面的那...)

學校 : 臺北市私立延平高級中學
編號 : 83268
來源 : [203.72.178.1]
最後登入時間 :
2023-10-30 13:02:50
a121. 質數又來囉 | From: [114.42.220.201] | 發表日期 : 2019-06-02 17:49

#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

 
#17925: Re:ㄜ.....


rexwu1104@gmail.com (黑雪公主 Black Lotus)

學校 : 新北市私立南山高級中學
編號 : 93041
來源 : [49.216.131.103]
最後登入時間 :
2024-06-06 19:28:43
a121. 質數又來囉 | From: [36.224.134.164] | 發表日期 : 2019-06-02 18:36

#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

 
ZeroJudge Forum