#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;
}
還是有更好的寫法 可以教一下嗎
測資出錯的部分: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