zoukankan      html  css  js  c++  java
  • CodeForces 230B

    CodeForces 230B

    关键问题:

    可被三个除数整除的数<=>素数的平方,其三个除数为(1,n,prims)。那么问题就转化为寻找【0,10^6】内的所有素数(筛法)的平方集,然后在集中搜索输入值;

    我的解法

    埃式筛法
    #include <iostream>
    #include <vector>
    #include <set>
    using namespace std;
    
    // eratosthenes 埃式素数筛
    // 可被三个除数整除的数<=>素数的平方,其三个除数为(1,n,prims)
    void findPrims(set<long long>& tprims, vector<bool>& flags)
    {
        flags[0] = flags[1] = false;
        for (long long i = 2; i < flags.size(); i++)
        {
            if (flags[i])
            {
                tprims.insert(i*i); // 素数平方即是T-Prims
                for (long long j = 2*i; j < flags.size(); j += i)
                {
                    flags[j] = false; // 素数的倍数不是素数
                }
            }
        }
    }
    
    int main()
    {
        int n;
        long long target;
        set<long long> tprims;
        vector<bool> flags(1000001, true);
        findPrims(tprims, flags);
        while(cin >> n)
        {
            while (n--)
            {
                cin >> target;
                if(tprims.find(target) != tprims.end()) 
                    cout << "YES" << endl;
                else 
                    cout << "NO" << endl;
            }
        }
    }
    

    注意
    以上解法绝非是最佳算法,但保证Accept!

  • 相关阅读:
    HDU 3555 Bomb (数位DP)
    ms sqlserver数据库主文件特别大怎么办
    w3wp.exe占用cpu特别高
    Excel的数据批量替换
    用Excel的分列功能格式化时间
    sql cte的使用
    数据结构
    http与浏览器学习
    长方形裁切优化与矩形物料排料
    架构知识
  • 原文地址:https://www.cnblogs.com/yocichen/p/15314061.html
Copyright © 2011-2022 走看看