• [luoguP2618] 数字工程(DP)


    传送门

    离线处理。。。

    先线性筛一遍。

    直接预处理出所有答案。

    注意要用push,用乘法,常数小。

    #include <cstdio>
    #include <cstring>
    #define N 1000001
    #define min(x, y) ((x) < (y) ? (x) : (y))
    
    int n, cnt;
    int f[N], prime[N];
    bool notpri[N];
    
    inline void init()
    {
    	int i, j;
    	notpri[0] = notpri[1] = 1;
    	for(i = 2; i < N; i++)
    	{
    		if(!notpri[i]) prime[++cnt] = i;
    		for(j = 1; i * prime[j] < N; j++)
    		{
    			notpri[i * prime[j]] = 1;
    			if(!(i % prime[j])) break;
    		}
    	}
    }
    
    int main()
    {
    	int i, j;
    	init();
    	memset(f, 127, sizeof(f));
    	f[1] = 0;
    	for(i = 1; i < N - 1; i++)
    	{
    		f[i + 1] = min(f[i + 1], f[i] + 1);
    		for(j = 1; j <= cnt && i * prime[j] < N; j++)
    			f[i * prime[j]] = min(f[i * prime[j]], f[i] + 1);
    	}
    	while(~scanf("%d", &n)) printf("%d
    ", f[n]); 
    	return 0;
    } 
    

      

  • 相关阅读:
    软件工程个人作业01
    动手动脑
    大道至简感想终结篇
    课后作业
    反思
    课后作业
    不忘初心,方得始终
    课后作业
    沟通,让一切变得简单

  • 原文地址:https://www.cnblogs.com/zhenghaotian/p/7354658.html
Copyright © 2020-2023  润新知