一、特點:可以分解任意超大數 。
二、運算結果展示:(用數組的1個單元存儲4位整數)
三、用C語言編程如下:
//分解超大數4(每單元存儲4位整數)
#include//輸入輸出頭函數
#include//字符串頭函數
#include
#include //日期時間頭函數
#define N 50 //數組尺寸大小
main ()
{ unsigned bz[N*4]={},b[N]={},c[N]={0,2},s[N]={},y[N*2]={},xj; //被除數b,除數c,商s,余數y,新積xj
int i,k,x,lbz,lb,lcz=1,lc=1; //循環變量i,k,x;被除數總位數lbz,單元數lb;除數總位數lcz,單元數lc
int jw,ss,l,g=0,jr=0; //進位jw,試商ss,積的單元數l,質數個數g,進入指示jr
int lb1,lc1,lc2,b5,q,c3=2; //lb1=lb-1,lc1=lc-1,lc2=lcz*2-1,被除數的前5位b5及其平方根q,除數前三位c3(本行的變量都是為了提高運行速度)
int z[50]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,
73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,
173,179,181,191,193,197,199,211,223,227,229}; //預存小于231的質數z(因231=3*7*11)
char bc[N]; //被除數串bc
//輸入及轉換:
printf(“請連續輸入被分解數:”);gets(bc);
float t0=clock(); //計時開始
lbz=strlen(bc)-1; i=lb=lbz/4 1; //求被算數的:總位數lbz,單元數lb
for(x=lbz;x>=0;x–) //被算數字符串轉換成整數
{ b[i]=b[i]*10 bc[lbz-x]-48;
if(x%4==0) {i–;} //每單元存儲4位整數
}
// 開始分解:
lbz;printf(” = 1″);
while (lcz<=lbz)
{ lc2=lcz*2-1; //除數位數的2倍lc2
// A.沒有分解完,繼續分解:
if(lc2
if(b[lb]>=1000) {b5=b[lb]*10 b[lb1]/1000;}
else if(b[lb]>=100) {lbz–;b5=b[lb]*100 b[lb1]/100;}
【因式分解計算器在線使用方法 在線分解質因數軟件】else if(b[lb]>=10) {lbz-=2;b5=b[lb]*1000 b[lb1]/10;}
else {lbz-=3;b5=b[lb]*10000 b[lb1];}
q=sqrt(b5 1); lc1=lc-1; //b.求被除數前5位的算術根q
for(x=1;x<=lb;x) {y[x]=b[x];} // c.開始做除法:
for(i=lb;i>=lc;i–)
{ y[i] =y[i 1]*10000;y[i 1]=0; s[i]=0;
while(y[i]>c[lc])
{ if(y[i]>=214748) ss=y[i]/(c[lc] 1);
else ss=(y[i]*10000 y[i-1])/(c[lc]*10000 c[lc1] 1);
if(ss==0) ss=1;
jw=0;s[i] =ss;
for(k=1;k<=lc1;k)
{ xj=c[k]*ss jw;
if(xj<=9999)jw=0; else{jw=xj/10000;xj%=10000;}
l=k i-lc;
if(y[l]
}
xj=c[lc]*ss jw;
y[i]-=xj;
}
}
while(y[lc]>=c[lc]) //d.判斷是否除完了:
{ for(x=lc;x>=1;x–)
{ if(y[x]>c[x]) break; //1.余數大的再去減一遍
if(y[x]猜你喜歡
