博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
斐波那契矩阵乘法加质因数分解
阅读量:7164 次
发布时间:2019-06-29

本文共 1207 字,大约阅读时间需要 4 分钟。

#include
#include
#include
#include
using namespace std;const long long maxn=1000000+10;const long long mod=2147483648;long long prime[maxn],primes[maxn],cnt;struct T{ long long s[4][4]; T(){ memset(s,0,sizeof(s)); }};T operator * (T a,T b){ T res; for(long long i=1;i<=2;i++){ for(long long j=1;j<=2;j++){ for(long long k=1;k<=2;k++) res.s[i][j]=(res.s[i][j]+a.s[i][k]*b.s[k][j]%mod)%mod; } } return res;}long long matrix_pow(T a, long long x) { T ans; ans.s[1][1]=ans.s[2][2]=1; while(x) { if(x&1)ans=ans*a; a=a*a; x>>=1; } return ans.s[2][1];}void choose(){ for(long long i=2;i*i<=5000;i++){ if(!prime[i]){ for(long long j=i*i;j<=5000;j+=i)prime[j]=1; } } for(long long i=2;i<=5000;i++)if(!prime[i])primes[++cnt]=i;}int main(){ long long i,j,k,m,n; T ans1; ans1.s[1][1]=ans1.s[1][2]=ans1.s[2][1]=1; scanf("%lld",&n); long long z=matrix_pow(ans1,n); choose(); printf("%lld=",z); long long flag=0; for(i=2;i<=z;i++){ if(z%i)continue; if(z%i==0&&!prime[i]){ while(z%i==0){ if(!flag)printf("%lld",i); else printf("*%lld",i); flag=1; z/=i;} } } return 0;}

转载于:https://www.cnblogs.com/brodrinkwater/p/7528013.html

你可能感兴趣的文章