成对最小公倍数~写题笔记

题目:

你只需要复制下面的代码并选择正确的语言提交即可通过此题。

 int superLCM( int n ) {
   int res = 0;
    for( int i = 1; i <= n; i++ )
        for( int j = i; j <= n; j++ )
           if( lcm(i, j) == n ) res++; // lcm是i和j的最小共倍数
    return res;
}

给你一个n,求superLCM(n)的值。

 

输入描述:


输入以整数T(T <= 200)开始,表示测试用例的数量。

每种情况都从包含整数n(1≤n≤10^6)的一行开始。

输出描述:


对于每个测试,每行打印函数superLCM( int n )返回的值。

样例输入:

15
2
3
4
6
8
10
12
15
18
20
21
24
25
27
29

样例输出:


2
2
3
5
4
5
8
5
8
8
5
11
3
4
2

 

解题思路: 

枚举n的所有因子 (lcm(i,j)==n;   i,j 一定是n的因子)。

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<math.h>
using namespace std;
const int MAXN = 1e6 + 9;
int a[MAXN];
int lcm(int i, int j)
{
    return (i / __gcd(i, j)) * j;  //不要写成 (i * j / __gcd(i,j)) , (i * j) 如果太大,会超long long
}
int book[MAXN];
int t = 0;
void deal(int n) // 找 n的因子
{
    t = 1;
    int mid = sqrt(n);
    for(int i = 1; i <= mid; i++)
    {
        if(n % i == 0)
        {
            if(book[i] == 0)
            {
                a[t++] = i;
                book[i] = 1;
            }
            if(book[n/i] == 0)
            {
                a[t++] = n / i;
                book[n/i] = 1;
            }

        }

    }
}
int main()
{
    int T;
    cin >> T;
    while(T--)
    {
        memset(a, 0, sizeof(a));
        memset(book , 0, sizeof(book));
        int n;
        cin >> n;
        deal(n) ;
        int ans = 0;

        for(int i = 1; i < t; i++)  //枚举n的因子
        {
            for(int j = 1; j < t; j++)
            {

                if(lcm(a[i],a[j]) == n)
                {
                        ans++;
                }
            }
        }

        cout  << (ans + 1 ) / 2 << endl;
    }
    return 0;
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值