简单的函数——Min_25筛

本文详细介绍了Min-25筛法的原理与应用,该筛法用于筛选积性函数,通过递归计算和剪枝优化,实现高效求解。文章提供了完整的代码示例,包括预处理、递归计算及剪枝策略。

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

%%yyb

%%zsy

就是实现一下Min-25筛 筛积性函数的操作

首先要得到

$G(M,j)=\sum_{t=j}^{cnt} \sum_{e=1}^{p_t^{e+1}<=M} [\phi(p_t^e)*G([M/(p_t^e)],t+1)+\phi(p_t^{(e+1)})]$
​ $+(F(M)-(F(p_{j-1})))$

先要预处理后面的部分,得到$F(M)$和$F(p_{j-1})$

$F(p_{j-1})$可以直接筛素数的时候前缀和计算一下

$F(M)$就要利用第一步的筛法了

发现,除了2之外的质数都是奇数,所以f(p^1)=p xor 1=p-1

对于2要特判

对于G,直接根据式子大力计算即可。

递归处理。由于值还是比较分散的,所以没有记忆化的必要。(而且状态很多,对空间极为不友好)

剪枝:pri[t]的平方大于n就不用继续算了。

代码:

#include<bits/stdc++.h>
#define il inline
#define reg register int
#define int long long
#define numb (ch^'0')
using namespace std;
typedef long long ll;
il void rd(int &x){
    char ch;bool fl=false;
    while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
    for(x=numb;isdigit(ch=getchar());x=x*10+numb);
    (fl==true)&&(x=-x);
}
namespace Miracle{
const int N=5e5+2;
const int M=5e5+2;
const int mod=1e9+7;
int pri[M],tot;
int sum[M];//pre of prime
bool vis[N];
int sqr;
ll f[N],g[N],h[N];
void sieve(int n){
    for(reg i=2;i<=n;++i){
        if(!vis[i]){
            vis[i]=1;
            pri[++tot]=i;
        }
        for(reg j=1;j<=tot;++j){
            if(i*pri[j]>n) break;
            vis[i*pri[j]]=1;
            if(i%pri[j]==0) break;
        }
    }
    for(reg i=1;i<=tot;++i){
        sum[i]=(sum[i-1]+pri[i])%mod;
        g[i]=(g[i-1]+(pri[i]^1))%mod;
    }
}
int id1[N],id2[N];

ll val[N];
ll n;
int S(int x,int j){
    if(x<=1||x<pri[j]) return 0;
    cout<<" xx "<<x<<" jj "<<j<<endl;
    int d=(x<=sqr)?id1[x]:id2[n/x];
    int ret=(f[d]-g[j-1]+mod)%mod;
    for(reg t=j;t<=tot&&pri[t]*pri[t]<=x;++t){
        int now=pri[t];
        for(reg e=1;now*pri[t]<=x;now=now*pri[t],++e){
            ret=(ret+(pri[t]^e)*S(x/now,t+1)%mod+(pri[t]^(e+1))%mod)%mod;
        }
    }
    return ret;
}
int main(){
    scanf("%lld",&n);
    if(n==1){
        puts("1");return 0;
    }
    sqr=sqrt(n);
//    cout<<" sqr "<<sqr<<endl;
    sieve(sqr);
//    cout<<" after sieve "<<endl;
    int m=0;
    for(ll i=1,x;i<=n;i=x+1){
        x=n/(n/i);
        val[++m]=n/i;
        if(val[m]<=sqr) id1[val[m]]=m;
        else id2[n/val[m]]=m;
    }
    for(reg i=1;i<=m;++i){
        f[i]=val[i]-1;h[i]=(((ll)val[i]%mod*(val[i]%mod+1))/2-1+mod)%mod;
    }
    for(reg j=1;j<=tot;++j){
        for(reg i=1;i<=m&&(ll)pri[j]*pri[j]<=val[i];++i){
            int to=(val[i]/pri[j])<=sqr?id1[val[i]/pri[j]]:id2[n/(val[i]/pri[j])];
            f[i]=(f[i]-(f[to]-(j-1))+mod+mod)%mod;
            h[i]=(h[i]-pri[j]*(h[to]-sum[j-1]+mod)%mod+mod)%mod;
        }
    }
    for(reg i=1;i<=m;++i){
        if(val[i]>=2) f[i]=(h[i]-f[i]+2+mod)%mod;
        else f[i]=0;
    }
    //cout<<" after prewrk "<<endl;
    printf("%lld",(S(n,1)+1)%mod);
    return 0;
}

}
signed main(){
    Miracle::main();
    return 0;
}

/*
   Author: *Miracle*
   Date: 2019/1/13 17:03:03
*/

 

转载于:https://www.cnblogs.com/Miracevin/p/10263570.html

``` {—————————————— 优化后系统参数 ——————————————} {——动态估值体系——} IND_PETTM:=FINANCE(33)/FINANCE(1); DYNPETTM_NORM:=CLOSE/(IND_PETTM*0.7 + MA(IND_PETTM,240)*0.3); PB_RATE:=CLOSE/MAX(FINANCE(5),0.000000001); {修正点} PEG_VAL:=DYNPETTM_NORM/MAX((FINANCE(54)/MA(FINANCE(34),3))*100,0.000000001); {修正点} {——智能波动率——} VOL_BAND:=EMA(STD(CLOSE,IF(VOL>MA(VOL,20)*2,10,30)),20); ADAPTIVE_VOL:=STD(CLOSE,20)/MA(CLOSE,20)*0.6 + VOL_BAND*0.4; VAR_PERIOD:=FLOOR(60-200*ADAPTIVE_VOL); MACD_PERIOD:=CEILING(60 - 40*ADAPTIVE_VOL); {——情绪引擎——} MF_RATIO:=SUM(IF(CLOSE>DYNAINFO(11),VOL,-VOL),5)/MA(VOL,5); HOT_INDEX_NEW:=EMA(MF_RATIO*0.5 + (AMOUNT/INDEXAMOUNT)*0.5,3); MONEY_FLOW:=EMA((AMOUNT-REF(AMOUNT,1))/REF(AMOUNT,1),3); SENTI_ACCEL:=MF_RATIO*HOT_INDEX_NEW/(1+ABS(MONEY_FLOW)); {——多周期共振——} MONTH_EMA_PERIOD:=IF(SLOPE(INDEXC,60)>0,360,480); MONTH_MA_NEW:=EMA(CLOSE,MONTH_EMA_PERIOD); MONTH_TREND:=CLOSE>MONTH_MA_NEW*1.02 AND SLOPE(MONTH_MA_NEW,5)>0; WEEK_DIF:=EMA(CLOSE,MACD_PERIOD)-EMA(CLOSE,MACD_PERIOD*2.2); WEEK_DEA:=EMA(WEEK_DIF,MACD_PERIOD*0.618); WEEK_MACD:=2*(WEEK_DIF-WEEK_DEA); WEEK_VOL:=EMA(V,5)>EMA(V,21)*1.2 AND V>REF(MA(V,5),1)*1.4; DAY_BREAK:=CLOSE>HHV(REF(HHV(HIGH,20),1),3) AND V>MA(V,20)*1.5; RSI6:=SMA(MAX(C-REF(C,1),0),6,1)/SMA(ABS(C-REF(C,1)),6,1)*100; DAY_RSI:=RSI6>65 AND RSI6<85; MIN60_BREAK:='CLOSE#MIN60'>'HHV(HIGH,15)#MIN60' AND 'VOL#MIN60'>'MA(VOL,20)#MIN60'*1.8; {——信号合成——} IND_CAPITAL:=EMA(SUM(AMOUNT,5)/FINANCE(1),3); INDUSTRY_RANK:=RANK(IND_CAPITAL)*0.6 + RANK(C/REF(C,20)/(INDEXC/REF(INDEXC,20)))*0.4; VOL_FILTER:=ADAPTIVE_VOL BETWEEN 0.15 AND 0.85; DEBT_FILTER:=FINANCE(42)/FINANCE(1)<0.45; CASH_FLOW:=FINANCE(25)/FINANCE(1)>0.25; FINAL_SIGNAL:MONTH_TREND AND INDUSTRY_RANK>0.75 AND WEEK_MACD>REF(WEEK_MACD,1) AND WEEK_VOL AND DAY_BREAK AND DAY_RSI AND MIN60_BREAK AND DEBT_FILTER AND CASH_FLOW AND PEG_VAL<0.75 AND DYNPETTM_NORM<22 AND SENTI_ACCEL>1.5 AND HOT_INDEX_NEW>1.2 AND MONEY_FLOW>0.12 AND VOL_FILTER;```你的身份是高级编程技术专家,精通各类编程语言,能对编程过程中的各类问题进行分析和解答。我的问题是【我编辑通达信选股代码,你如何深度理解此代码能否选到资金持续流入,股票市场情绪启动,盘中异动启动主升浪的股票,及日线盘中预警选股和盘后选股。用2018-2024年全A股周期回测验证此代码选股逻辑的准确性和胜率,评估月胜率达到多少?评估有效信号准确率达到多少?,同时此代码还有什么可提升的空间,提出可行性的优化建议和方案,学习动态优化参数,增强行业轮动因子,结合市场情绪指标,去除冗余选股条件,月胜率提高至80%以上,有效信号准确率95%以上,优化选股逻辑和所有参数计算关系和信号触发条件。修正后要求选股胜率达到月胜率提高至80%以上,有效信号准确率95%以上,选到资金持续流入,股票市场情绪启动,盘中异动启动主升浪的股票,及日线盘中预警选股和盘后选股。请帮我检查并全正确代码,生成优化后完整代码。
最新发布
03-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值