• Educational Codeforces Round 54 (Rated for Div. 2) B. Divisor Subtraction


    观察易得

    1.质数无1和自身外的因子 且只有本身既质又因 按题意直接一步减自身至零

    2.若N是偶数则一直减2直到0

    所有质数都是奇数 奇数减奇数易得偶数 再回到条件2 一步到位

    所以操作次数不会太多

    线筛打表 结合1 2 暴力模拟即可

    /*
        Zeolim - An AC a day keeps the bug away
    */
    
    //pragma GCC optimize(2)
    #include <cstdio>
    #include <iostream>
    #include <cstdlib>
    #include <cmath>
    #include <cctype>
    #include <string>
    #include <cstring>
    #include <algorithm>
    #include <stack>
    #include <queue>
    #include <set>
    #include <sstream>
    #include <map>
    #include <ctime>
    #include <vector>
    #include <fstream>
    #include <list>
    #include <iomanip>
    #include <numeric>
    using namespace std;
    typedef long long ll;
    
    const int MAXN = 1e7 + 10;
    
    bool check[MAXN] = {0};
     
    int prime[MAXN] = {0};
     
    int pos = 0;
     
    int flag;
    
    void initprime(int len)
    {
    	for(int i = 2; i < len; i++)
    	{
    		if(!check[i])
    			prime[pos++] = i;
    			
    		for(int j = 0; j < len && i * prime[j] < len; j++)
    		{
    			check[i * prime[j] ] = 1;
    			
    			if(i % prime[j] == 0)
    				break;
    		}
    	}
    }
    
    bool isprime(ll x)
    {
        if(x < 2)
            return false;
        for(ll i = 2; i * i <= x; i++)
            if(x % i == 0)
                return false;
        return true;
    }
    
    int main()
    {
        //ios::sync_with_stdio(false);
        //cin.tie(0);     cout.tie(0);
        //freopen("D://test.in", "r", stdin);
        //freopen("D://test.out", "w", stdout);
    	//double start, stop;
    	//start = clock();
    	//stop = clock();
    	//printf("%lf", (stop - start) / CLK_TCK);
    	
    	
        initprime(MAXN - 10);
    	
    	ll n, count = 0;
    
        scanf("%lld", &n);
        
        
    	
    	if(n > prime[pos - 1] && isprime(n) || prime[lower_bound(prime, prime + pos, n) - prime] == n)
            printf("1
    ");
            
        else
        {
            while(n)
            {
               	if(n > prime[pos - 1] && isprime(n) || prime[lower_bound(prime, prime + pos, n) - prime] == n)
                {
                    ++count;
                    break;
                }
                else if(n % 2 == 0)
                {
                    count += n / 2;
                    break;
                }
                else
                {
                    for(ll i = 0; i < pos; i++)
                    {
                        if(n % prime[i] == 0)
                        {
                        	n -= prime[i], ++count;
                        	break;
    					}
                            
                    }
                }
                    
            }
    
            printf("%lld
    ", count);
        }
    
        return 0;
    }
  • 相关阅读:
    如何 Scale Up/Down Deployment?- 每天5分钟玩转 Docker 容器技术(126)
    读懂 Deployment YAML
    k8s 创建资源的两种方式
    在qemu模拟的aarch32上使用kgtp
    交叉编译gdb和gdbserver
    基于设备树的controller学习(2)
    基于设备树的controller学习(1)
    基于设备树的TQ2440 DMA学习(4)—— client驱动
    基于设备树的TQ2440 DMA学习(3)—— DMA控制器驱动
    基于设备树的TQ2440 DMA学习(2)—— 简单的DMA传输
  • 原文地址:https://www.cnblogs.com/zeolim/p/12270414.html
Copyright © 2020-2023  润新知