?? s2.cpp
字號:
#include "stdafx.h"
pF initF(bint x_13,int *PList)
{
//動態開辟結構體F的數組 arrayF[x_13]
pFarrayF;
arrayF=(pF)malloc(sizeof(F)*x_13);
bint i,j;//??j可能為int
int* p;
for(i=0;i<x_13;i++)
{
arrayF[i].m=i;
arrayF[i].miu_m=//??在其他函數中已被計算出來
for(p=PList,j=0;j<a;j++)
{
if(i%*(p+j-1)==0)
{
arrayF[i].f_m=*(p+j-1);
break;
}
}
}
return arrayF;
}
bint max(bint x,bint y)
{
if(x>=y)
return x;
else
return y;
}
bint min(bint x,bint y)
{
if(x>=y)
return y;
else
return x;
}
bint s2(bint x,bint a,int *PList)
{
bint s2=0;//函數返回值
//初始化F
pF arrayF;
arrayF=F(bint x_13);
//-----------------------------------------------3.7
bint N=x_13;//x_13表示x的1/3次方取整
//據此求k的變化范圍
//動態建立fai[a] //a=pi(x_13)
//-----------------------------------------------3.8
//動態建立a[floor(log2N)][floor(N/2^i)+1] //??可以采取鏈表數組形式創建a
//a[floor(log2N)][floor(N/2^i)+1]=2^i //初始化數組a
//-----------------------------------------------3.9
int* p=PList; //傳入p表
bint k,/*搜索區間參數*/j/*fai的第二個參數*/;
bint y,l;//l從1到N變化//??正常區間,非正常區間待定
bint L,U;//父結點搜索區間的下限與上限
bint m;//父結點
for(k=1;k<=N+2;k++) //搜索第k個區間
{
for(j=1;j<=a;j++) //fai的第二個參數的變化
{
//1.固定k,j的一次篩選,更新數組a
while(*p<=*(p+j-1))
{
for(l=1;l<=N;l++)//??當Bk是正常區間,非正常區間待定
{
y=(k-1)*N+l;
if(y%(*p)==0)
{
//所有I_i,j包含y的a[i][j]--
}
}
p++;
}
//--------------------------------------------------------3.9.5
//2.估算葉子值
L=max((x/((k*N+1)*(*(p+j)))),1);
U=min((x/((((k-1)*N+1)*(*(p+j)))),N);
//---------------------------------------------------------3.13
for(m=L;m<=U;m++)
{
if(arrayF[m].f_m>*(p+j)&&arrayF[m].miu_m!=0)
{
y=floor(x/(m*(*(p+j))));
l=y-(k-1)*N;
//提取l的二進制表示,即提出一個數組e[m-1],??可以考慮用位操作
bint fai_yj=0,h;
for(i=0;i<m;i++)
{
for(j=0,h=1;j<i;j++)
{
h+=pow(2,e[j]-e[i]);
}
fai_yj+=a[e[i]][h];
}
fai_yj+=fai[j];
//---------------------------------------------------------3.10
s2+=miu_m*fai_yj;//s2的數值累積
}
}
//3.更新fai表
l=N;
//提取l的二進制表示,即提出一個數組e[m-1]
bint fai_yj=0,h;
for(i=0;i<m;i++)
{
for(j=0,h=1;j<i;j++)
{
h+=pow(2,e[j]-e[i]);
}
fai_yj+=a[e[i]][h];
}
fai_yj+=fai[j];
fai[j]=fai_yj;//3.8的更新
//---------------------------------------------------------3.10
}
}
return s2;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -