费马因子分解法——C语言实现

Fermat 的因式分解方法可以直接求出PQ的距离,值得学习。

#include <stdio.h>
#include <math.h>

int n;
int tmp;

int ponySqrt(int x){
    if(x<=0) return -1;
    return (int)sqrt(x)*(int)sqrt(x)==x? (int)sqrt(x):-1;
}

void fermat(long long int n){
	
    while(n%2==0){
        n/=2;
        printf("*2");
    }

    for(int i=(int)sqrt(n);;++i){
    	
        tmp=ponySqrt(i*i-n);
        //printf("%d + %d = %d\n",tmp,i,i+tmp);
        
        if(tmp!=-1){
            printf("%d*%d",i+tmp,i-tmp);
            n/=(i+tmp);
            n/=(i-tmp);
            if(n<=1) break;
            i=(int)sqrt(n);
        }
    }		
}

int main()
{
    long long int n = 70191551;
    
    printf("n = %lld\n",n);

    fermat(n);

    return 0;
}

### 回答1: 费马因子分解是一种用于分解大质数的算法。Python 中可以使用 SymPy 库来实现费马因子分解。 以下是一个简单的费马因子分解实现示例: ```python from sympy import * from math import sqrt def fermat_factor(n): a = ceil(sqrt(n)) b2 = a**2 - n while not is_square(b2): a += 1 b2 = a**2 - n return a - sqrt(b2), a + sqrt(b2) n = 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123 p, q = fermat_factor(n) print("p = ", int(p)) print("q = ", int(q)) ``` 在上面的代码中,我们首先导入了 SymPy 和 math 库。然后,我们定义了一个名为 `fermat_factor` 的函数,该函数接受一个整数 `n` 作为输入,然后返回两个因子 `p` 和 `q`。该函数使用了费马因子分解算法来分解 `n`。 最后,我们传入一个具有较大质数的值 `n`,并打印出得到的因子 `p` 和 `q` 的值。 请注意,对于非常大的数,费马因子分解可能会非常耗时,并且可能需要使用更高效的算法。 ### 回答2: 费马因子分解是指将一个给定的正整数分解为其质因数相乘的形式。Python是一种流行的编程语言,可以用来实现费马因子分解算法。 要实现费马因子分解算法,可以按照以下步骤进行: 1. 首先,定义一个函数,接受一个正整数作为输入参数。这个函数将用来执行费马因子分解算法。 2. 在函数内部,创建一个空列表,用来存储分解后的质因数。 3. 使用一个循环从2开始遍历到输入的正整数。循环中的每个数字都作为一个潜在的质因数进行尝试。 4. 在循环内部,判断当前数字是否是输入正整数的因数。如果是因数,则将它添加到质因数列表中,并将输入的正整数除以该因数。 5. 循环直到输入的正整数无再被整除为止。 6. 最后,输出质因数列表,即为分解后的质因数。 以下是一个使用Python实现费马因子分解算法的示例代码: def fermat_factorization(n): factors = [] for i in range(2, n+1): while n % i == 0: factors.append(i) n = n / i return factors num = int(input("请输入一个正整数:")) result = fermat_factorization(num) print(num, "的质因数分解为:", result) 运行该代码,用户可以输入一个正整数,然后程序将输出该数的质因数分解结果。 ### 回答3: 费马因子分解是一种整数分解算法,它将一个给定的正整数分解成素数的乘积。在Python中,我们可以编写一个程序来实现费马因子分解。 首先,我们需要定义一个函数,输入参数为要分解的正整数n。然后,我们可以使用一个循环来迭代地测试从2开始的所有可能的因子,直到找到一个素数因子。我们可以使用一个判断条件来检查一个数是否为素数。若我们找到了一个素数因子,我们可以将其添加到一个列表中,并将n除以此素数,再次进行循环。 下面是一个示例代码: ```python def fermat_factorization(n): factors = [] while n % 2 == 0: factors.append(2) n = n // 2 p = 3 while p * p <= n: if n % p == 0: factors.append(p) n = n // p else: p += 2 if n > 1: factors.append(n) return factors ``` 我们可以调用这个函数来进行测试: ```python n = 84 result = fermat_factorization(n) print("The prime factors of", n, "are:", result) ``` 这将输出以下结果: ``` The prime factors of 84 are: [2, 2, 3, 7] ``` 这说明84的质因数分解为2 * 2 * 3 * 7。这就是费马因子分解在Python中的实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值