zoukankan      html  css  js  c++  java
  • 寻找i*j=m的个数

    问题描述

    3*3的矩阵内容。

    1 2 3

    2 4 6

    3 6 9

    即a[i][j](1<=i<=n,1<=j<=n)=i*j。

    问一个这样n*n的矩阵里面,里面m出现的次数。

    例如n为3,m为6.

    那么出现的次数就是2

    Input

    输入正整数N,表示N例测试(N<=20)。接着输入n(n<=10^5),m(<=10^9)。

    Output

    对每组输入数据,输出m出现的次数。

    Sample Input

    2

    3 6

    3 3

    Sample Output

    2

    2

    #include <iostream>
    #define N 100000
    using namespace std;
    
    int main()
    {
        int t;
        cin >> t;
        while(t--){
            int n;
            cin >> n;
            int m;
            cin >> m;
            int cnt=0;
            for(int i=1;i<=n;i++){
                if(m%i==0 && m/i<=n)
                    cnt++;
            }
            cout << cnt << endl;
        }
        return 0;
    }

    P.S.很多人把这个题想的太复杂。如果矩阵的每个数都要看,时间复杂度是10^10*2*10,肯定会超时。

    我们仔细想下这个题目,每行最多只有一个数。如果第i行。如果能找到i*j==m并且j<=n,那么就可以。

    每行判断m%i是否为0,m/i就是j如果<=n,那么那个数就是m。cnt++。

  • 相关阅读:
    @Autowired注解与@Qualifier注解搭配使用
    前端中具体实现
    js文件处理
    跨域解决方案
    WebSocket实现
    js触摸操作
    RPC框架gRPC
    RPC框架Thrift
    分布式RPC
    RPC基本原理
  • 原文地址:https://www.cnblogs.com/xym4869/p/8659868.html
Copyright © 2011-2022 走看看