zj a007 程式執行問題

查看數: 3027 | 評論數: 11 | 收藏 0
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發佈時間: 2014-8-26 12:49

正文摘要:

每次執行此程式都出現這個 程式碼如下 [C++] 純文本查看 復制代碼#include<iostream> #include<iostream> using namespace std; int main() {         int x;         whil ...

回復

林宇翔 發表於 2014-8-27 12:57:34
我是用這樣
[C++] 純文本查看 復制代碼
#include<iostream>
using namespace std;
int main()
{
	bool IsPrime[1000001];
    IsPrime[0] = 0;
    IsPrime[1] = 0;
    for(int m=2;m<1000001;m++)
        IsPrime[m] = 1;
        
    for(int m=4;m<1000001;m+=2)
        IsPrime[m] = 0;
    for(int m=3;m<1000001;m+=2)
    {
        if(IsPrime[m])
            for(int n=m*2;n<1000001;n+=m)
                IsPrime[n] = 0;
    }
    
    int a,ans;
    while(cin>>a)
    {
        if(IsPrime[a] == 1)
        {
        	cout<<"質數"<<endl; 
        }
        else
        {
        	cout<<"非質數"<<endl;
        }
    }
	return 0;
}

點評

這題範圍不是到2^31-1嗎  發表於 2014-8-27 13:25
allenwhale 發表於 2014-8-26 22:01:50
這題直接做也可以AC吧
[C++] 純文本查看 復制代碼
#include <stdio.h>
int p[7000];
int pn=0;
void init()
{
	p[pn++]=2;
	p[pn++]=3;
	for(int i=5;i<=65536;i+=2)
	{
		bool tf=true;
		for(int j=0;j<pn&&p[j]*p[j]<=i;j++)
		{
			if(i%p[j]==0)
			{
				tf=false;
				break;
			}
		}
		if(tf)p[pn++]=i;
	}
}
int main()
{
	init();
	int N;
	while(~scanf("%d",&N))
	{
		for(int i=0;i<pn&&p[i]*p[i]<=N;i++)
		{
			if(N%p[i]==0)
			{
				printf("非質數\n");
				goto end;
			}
		}
		printf("質數\n");
		end:;
	}
	return 0;
}
Sylveon 發表於 2014-8-26 21:31:56
AC 這一題的方法

1.雞尾酒方法(我亂取的)
2.範圍內100%正確的隨機演算法

點評

Miller-Rabin  發表於 2014-8-26 21:33
visitorIKC 發表於 2014-8-26 21:20:47
Brad 發表於 2014-8-26 20:40
我幫你試過了
這種方式會 TLE
e

判斷2,3,6n+1,6n+5,e<=sqrt(x)也一樣
就是因為這樣這題到現在我還沒有AC.
Brad 發表於 2014-8-26 20:40:14
本帖最後由 Brad 於 2014-8-26 20:42 編輯

我幫你試過了
這種方式會 TLE
e<=sqrt(x) 也一樣
先判斷x是否為2的倍數,若非則e再把小於等於sqrt(x)的奇數都跑一次也一樣

點評

難怪這題這麼難......  發表於 2014-8-26 21:10
Sylveon 發表於 2014-8-26 19:34:35
我記得營隊的時後有叫大家先不要寫a007

點評

又~絕對有  發表於 2014-8-26 19:55
allenwhale 發表於 2014-8-26 19:16:00
這已經不是TLE的問題吧
會先RE吧
visitorIKC 發表於 2014-8-26 19:14:03
本帖最後由 visitorIKC 於 2014-8-26 19:16 編輯

你的演算法有接近100%的機率得到可愛的TLE...(ZJ a007)

點評

神回~  發表於 2014-8-26 19:56
首先會:RE,再過來會:TLE,最後還會拿到:WA  發表於 2014-8-26 19:28
Panda_Liu 發表於 2014-8-26 18:47:18
break呢? 大大?
快速回覆 返回頂部 返回列表