zju(3024) Monday-Saturday Prime Factors

作者在 2008-08-20 11:05:08 发布以下内容
1.先作出这个数的常规意义下的所有因子,再验证这些因子是否满足特定的素因子的条件.
 
2.用线形筛法筛出可能的素因子,hash或者二分查找.
 
 
#include <iostream>
#include <algorithm>
using namespace std;
int a[300001];
int ans[60000];
void prime(int n)
{
 a[0]=1;
 a[1]=1;
 for(int i=2;i*i<=n;i++)
 {
  if(a[i]==0&&(i%7==1||i%7==6))
  {
   for(int j=i*i;j<=n;j+=i)
   {
    a[j]=1;
   }
  }
 }
}
int factor(int n)
{
 int k=0;
 for(int i=2;i*i<=n;i++)
 {
  if(n%i==0)
  {
   ans[k++]=i;
   if(i!=n/i)
   ans[k++]=n/i;
  }
 }
 ans[k++]=n;
 sort(ans,ans+k);
 return k;
}
int main()
{
 prime(300000);
 int n;
 while(cin >>n)
 {
  if(n==1)
   break;
  else
  {
   cout<<n<<":";
   int x=factor(n);
   for(int i=0;i<x;i++)
   {
    if((ans[i]%7==1||ans[i]%7==6)&&!a[ans[i]])
     cout<<" "<<ans[i];
   }
   cout<<endl;
  }
 }
 return 0;
}
acm | 阅读 3409 次
文章评论,共0条
游客请输入验证码
浏览255980次