zoukankan      html  css  js  c++  java
  • SPOJ AMR10I 递归

    DES :给你n 块石头。不会超过70。把它们分成n堆。每堆里的石头数做积。问共有多少个数。最终的结果除了1之外都能分解成素数相乘或者素数相乘再乘1.所以可以找到所有不超过70的素数然后进行深搜。

    感觉深搜好难好难好难....

    #include<stdio.h>
    #include<iostream>
    #include<set>
    using namespace std;
    
    int prime[21] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73};
    set<long long>s;
    int p;
    
    void dfs(int x, int n, long long ji) // 要不要第x个数。当前值是多少。当前乘积是多少/
    {
        s.insert(ji);
        if (prime[x] > n) return;
        dfs(x+1, n, ji); // 不取第x个素数
        dfs(x, n-prime[x], ji*prime[x]%p); // 取第x个数
    }
    
    int main()
    {
        int t;
        cin >> t;
        while(t--)
        {
            int n;
            cin >> n >> p;
            s.clear();
            dfs(0, n, 1);
            cout << s.size() << endl;
        }
        return 0;
    }
    L哦哦K
  • 相关阅读:
    python-杂烩
    24 Python 对象进阶
    23 Python 面向对象
    22 Python 模块与包
    21 Python 异常处理
    20 Python 常用模块
    18 Python 模块引入
    2 Python 基本语法
    1 Python 环境搭建
    3 Python os 文件和目录
  • 原文地址:https://www.cnblogs.com/icode-girl/p/4691619.html
Copyright © 2011-2022 走看看