Pollard "p-1"方法 分解合数的因素;

本文介绍了一种名为 Pollard p-1 的素因数分解算法,该算法通过选取一个特殊整数 k,并利用该整数的特定性质来寻找合数 n 的非平凡因子。具体步骤包括计算 a 的 k 次方模 n 的值,进而通过求最大公因子的方式找出 n 的因子。

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

/*
 Pollard "p-1"方法
 (1).选取一个可被许多素数的幂次整除的正整数k;例如k=LCM(1,2,……B)
 (2)指数。计算ak=a^k mod n;
 (3)计算最大公因子,计算d=gcd(ak-1,n)
 (4)找到因子?若1<d<n,则d为n 的非平凡因子。然后尽心步骤(6)
 (5)重新开始?若d不是n 的平凡因子,且还想再进行一次实验的话则返回(2)
        重新选择a和k,再进行上述步骤,否则执行步骤(6)
(6)退出。
 */

#includes<iostream>

using namespace std;
  long long factoring(long long n)
 {
      long long a,k=840,d,ak;
      int t=0;
      srand((unsigned)time(NULL));
      a=rand()%n;
      if(a<2)a=a+2;
       a=2;
       while(1)
       {
         long long i;
         ak=1;
         for(i=0;i<k;i++)
                ak=(ak*a)%n;
         if(ak==0)ak=n;
         d=gcd(n,ak-1);
         if(d<n&&d>1&&n%d==0)
         {

             return d;
          }
          a=rand()%n;
          if(a<2)a=a+2;
      }
 }
int main()
{
   long long n;
   int i;
   cin>>n;
   cout<<factoring(n,fa,number)<<endl;
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值