#17042: 請問哪裡出錯了 測資885387 : 2個質因數 但是我只能 885387 : 1個質因數


asddzxcc1856 (嚕踢)

學校 : 國立中興大學
編號 : 86097
來源 : [61.223.99.184]
最後登入時間 :
2023-08-21 21:25:52
d120. 10699 - Count the factors -- UVa10699 | From: [1.160.78.214] | 發表日期 : 2019-03-01 23:43

#include <iostream>
#include <cmath>
using namespace std;

bool prime (int n);
int s[1000000];

int main ()
{
int max=0;
for (int i=1;sqrt(i*i)<=46346;i++)
{
if (prime(i))
{
s[max++]=i;
}
}

int n;
while (cin >>n)
{
int pro=0,y=0;
for (int i=0;s[i]<=n && s[i]>0;i++)
{
if (n%s[i]==0 && pro!=s[i])
{
pro=s[i];
y++;
}
}
cout << n << " : " << y << endl;
}
}

bool prime (int n)
{
if (n<2) return false;
for (int i=2;i<n;i++)
{
if (n%i==0) return false;
}
return true;
}

 

  還是有更好的寫法 可以教一下嗎

 
#17046: Re:請問哪裡出錯了 測資885387 : 2個質因數 但是我只能 885387 : 1個質因數


rollfc (胖胖貓)

學校 : 國立清華大學
編號 : 81012
來源 : [36.229.32.172]
最後登入時間 :
2024-05-03 00:12:26
d120. 10699 - Count the factors -- UVa10699 | From: [140.113.136.219] | 發表日期 : 2019-03-02 17:34

測資出錯的部分:n=885387=3*295129,可以發現出錯的原因和 d121 一樣,你的質數範圍只存到 46341

另外提到判斷質數比較快的方法:請參考演算筆記的『篩法』(http://www.csie.ntnu.edu.tw/~u91029/Prime.html#3)

你的 a007 已經通過了,但可以發現時間上需要 0.9s ,如果要快速判斷質數時間希望可以落在 0.1s 左右

會用到米勒拉賓質性判斷,請參考 inversion 大大的文章:https://home.gamer.com.tw/creationDetail.php?sn=4186689

 
ZeroJudge Forum