素因子

本文介绍了一种快速求解整数最大素因子及其素因子总数的算法。通过筛选法预先找出一定范围内的所有素数,并利用这些素数来分解目标整数,从而高效地找到其最大素因子及素因子的数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Problem B: 素因子

Time Limit: 5 Sec   Memory Limit: 128 MB
Submit: 266   Solved: 113
[ Submit][ Status][ Web Board]

Description

我们知道,任何一个大于1的数,都可以写成多个素数的乘积,我们把这些素数叫做这个数的素因子。

Input

第一行为测试数据的组数N,

以下N行,每行一个数字k(1<k<2^24)

Output

输出N行,每行两个数字,一个是k的最大素因子,第二个是k的素因子的个数。

Sample Input

3
10
25
120

Sample Output

5 2
 
#include"stdio.h"
#include"math.h"
inline void  read(int &p)//输入p;
{
   char  ch;
   while(ch=getchar(),ch<'0'||ch>'9');
   p=ch-'0';
   while(ch=getchar(),ch>='0'&&ch<='9')
     p=p*10+ch-'0';      
}
char  prime[4205]={0};
int num[4000],cnt=0;
int main()
{
   int T;
   read(T);
   int i=4;
   while(i<=4200)
      prime[i]=1,i+=2;
      for(int i=3;i<=2200;i+=2)
         if(!prime[i])
            for(int j=i*i;j<=4200;j+=i)
              prime[j]=1;
      for(int i=2;i<=4200;++i)
           if(!prime[i])
               num[cnt++]=i;
     while(T--)
     {
         int n;
         read(n);
         int Max=0,s=0;
         int i=0;
         int t=sqrt(n);
         for(;num[i]<=t;++i)
         {
             if(n%num[i]==0)
             {
                 if(num[i]>Max)
                    Max=num[i];
                 while(n%num[i]==0)
                    n/=num[i];
                    ++s;              
             }
             t=sqrt(n);
         }
         if(n>1)
           ++s,Max=n;
           printf("%d %d\n",Max,s);
     }
     return 0;  
}

转载于:https://www.cnblogs.com/QQbai/archive/2011/08/02/2124762.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值