zoukankan      html  css  js  c++  java
  • C

    /**
    题目:C - Aladdin and the Flying Carpet
    链接:https://vjudge.net/contest/154246#problem/C
    题意:有多少种长方形满足面积为a,且最短边>=b;长方形边长为整数,且一定不可以是正方形。
    思路:求出a的素因子以及每个素因子的个数,然后搜索所有满足条件的方法数。
    其实可以求出所有<b的方法数,用总的减去它,可以更快,不过更麻烦。
    */
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int maxn = 1e6+100;
    ll prime[maxn];
    int z;
    vector<ll>v;
    int num[104];
    int cous;
    ll a, b;
    void init()
    {
        memset(prime, 0, sizeof prime);
        for(int i = 2; i < maxn; i++){
            if(prime[i]==0){
                for(int j = i+i; j < maxn; j+=i){
                    prime[j] = 1;
                }
            }
        }
        z = 0;
        for(int i = 2; i < maxn; i++){
            if(prime[i]==0){
                prime[z++] = i;
            }
        }
      ///  cout<<"prime number = "<<z<<endl; 78000ge
    }
    ll ans;
    void solve(int h,ll value)
    {
        if(h==0){
            if(value>=b&&a/value>=b&&value*value!=a) ans++;
            return;
        }
        for(int i = 0; i <= num[h-1]; i++){
            if(i>0){
                value*=v[h-1];
            }
            solve(h-1,value);
        }
    }
    int main()
    {
        init();
        int T, cas=1;
        cin>>T;
        while(T--)
        {
            int cnt = 0;
            scanf("%lld%lld",&a,&b);
            v.clear();
            ll n = a;
            cous = 0;
            memset(num, 0, sizeof num);
            for(int i = 0; i < z&&prime[i]*prime[i]<=n; i++){
                if(n%prime[i]==0){
                    v.push_back(prime[i]);
                    while(n%prime[i]==0){
                        n/=prime[i];
                        num[cous]++;
                    }
                    cous++;
                }
            }
            if(n>1){
                v.push_back(n);
                num[cous++] = 1;
            }
            ans = 0;
            solve(cous,1);
            printf("Case %d: %lld
    ",cas++,ans/2);
        }
        return 0;
    }
  • 相关阅读:
    1135
    Sort(hdu5884)
    🍖CBV加装饰器与正反向代理简介
    🍖django之Cookie、Session、Token
    🍖Django之forms组件
    🍖forms组件源码分析
    🍖Django与Ajax
    🍖Django框架之模板层
    进程的内存空间相互隔离
    Codeforces Round #583 (Div. 1 + Div. 2, based on Olympiad of Metropolises), problem: (D) Treasure Island
  • 原文地址:https://www.cnblogs.com/xiaochaoqun/p/6613293.html
Copyright © 2011-2022 走看看