zoukankan      html  css  js  c++  java
  • LightOJ 1341 Aladdin and the Flying Carpet【整数分解】

    题目链接:

    http://lightoj.com/login_main.php?url=volume_showproblem.php?problem=1341

    题意:

    给定一个数,将其拆分成两个数的乘积,问有多少种组合,其中两个因子均大于等于给定值。

    分析:

    整数分解,找质因子的个数,组合一下就好。
    注意题目中说不要正方形,然后最后处理一下每种组合被算两次的情况。

    代码:

    #include <iostream>
    #include <vector>
    using namespace std;
    const int maxn = 1e6 + 5;
    int flag[maxn], prime[maxn];
    typedef long long ll;
    int tot = 0;
    void getprime()
    {
        fill(flag, flag + maxn, 1);
        for(int i = 2; i < maxn; i++){
            if(flag[i]){
                prime[tot++] = i;
                for(int j = 2 * i; j < maxn; j += i){
                    flag[j] = 0;
                }
            }
        }
    }
    int main (void)
    {
        int n;
        int T;cin>>T;
        getprime();
        ll a, b, t;
        int cas  = 1;
        ll cnt;
        while(T--){
            cin>>a>>b;
            t = a;
            ll ans = 1;
            if(a / b <  b)  {
                cout<<"Case "<<cas<<": "<<0<<endl;
               cas++;
                continue;
            }
            for(int i = 0; i < tot && prime[i] * prime[i]<= a; i++){
                cnt = 0;
                while(a % prime[i] == 0){a /= prime[i]; cnt++;}
                ans *= (cnt + 1);
            }
            if(a > 1) ans *= 2;
            ans /= 2;
            for(ll i = 1; i < b; i++){
                if(t % i == 0)  ans--;
            }
            cout<<"Case "<<cas<<": "<<ans<<endl;
            cas++;
        }
        return 0;
    }
  • 相关阅读:
    http简记
    socket简介
    iOS代理
    ai作图小技能
    按钮切换
    关于ie8背景图片的平铺
    关于文本省略
    关于html table样式
    阿里巴巴iconfont使用方法(超级详细)
    办公电脑安装虚拟机基本就绪
  • 原文地址:https://www.cnblogs.com/Tuesdayzz/p/5758660.html
Copyright © 2011-2022 走看看