首页 > 其他分享 >数论

数论

时间:2022-10-15 18:24:21浏览次数:68  
标签:平方 数论 ll long int 因子 12600

数论

D - Together Square (atcoder.jp)

给你一个 \(n\) ,求有多少对 \((i,j)\) 满足 \(i∗j\) 是一个平方数, \(i,j\) 满足小于等于 \(n\) 。

思路:枚举 \(i\) ,看有多少 \(j\) 跟它相乘是平方数

分两种情况:

​ 如果 \(i\) 是平方数,那么 \(j\) 必须是平方数。

​ 如果 \(i\) 不是平方数:

​ 找到最小的跟 \(i\) 相乘是平方数的 \(x\),怎么找这个数呢?

​ 要用到质因数分解,比如 \(12600=2^3*3^2*5^2*7^1\),这显然不是一个平方数,要让它成为平方数

​ 就要让次数为奇数的因子变成偶数,比如 \(12600\) 的 \(2\) 和 \(7\),也就是给它们各在分配一个,所以

​ \(12600*2*7\) 就是平方数,我们把 \(2*7\) 拿出来,那么这个数就是与 \(12600\) 相乘是平方数的最小数

​ 所以 \(2*7\) 就算一个贡献,很容易直到还有 \(2*7*2^2,2*7*3^2,...,2*7*x^2\),这个数要小于 \(n\)

代码:

#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
#define ll long long
ll n;
ll ans = 0;
void divid(int x)
{
    int res = 1;
    for (int i = 2; i*i <= x; i++)
    {
        if (x % i == 0)
        {
            int cnt = 0;
            while (x % i == 0)
            {
                x /= i;
                cnt++;
            }
            if (cnt % 2)
            {
                res *= i;
            }
        }
    }
    if (x > 1)
        res *= x;//如果x还剩因子,那这个因子的次数一定是1,假设该因子是e,那么e*e>x,说明x只有一个e。
    //cout << res << endl;
    for (int i = 1; i * i * res <= n ; i++)
    {
        ans++;
    }
}
int main()
{
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        divid(i);
    }
    cout << ans;
}

标签:平方,数论,ll,long,int,因子,12600
From: https://www.cnblogs.com/Jayint/p/16794706.html

相关文章

  • RE:从零开始的数论相关学习
    开坑。1-位运算我们知道,C++中的位运算有:&、|、^、~、>>、<<。应用:1-1快速幂:intqpow(inta,intb,intp){intvis=a;intsum=1;while(b){......
  • 数论超级缝合怪——P5285骗分过样例
    P5285[十二省联考2019]骗分过样例\(\operatorname{Case}1\sim7:\)从\(ans[0]=1,ans[1]=19,ans[2]=361\)等可以看出是\(19^n\)\(\quad\operatorname{Case}1,2\)直......
  • 数学数论全集
    扩展欧几里得定理\[ax+by=(a,b);bx_0+(a\bmodb)y_0=(a,b);x=y_0;y=(a/b)y_0+b(x_0)\]证:\({a}x+{b}y=(a,b)=(b,a\bmodb)=bx+(a\bmodb)y=bx_0+(a-(a/b)b)y......
  • *Educational Codeforces Round 87 (Rated for Div. 2) C1. Simple Polygon Embedding
    https://codeforces.com/problemset/problem/1354/C1题目大意:给定一个数字n,表示构建出一个大小为2*n的边长的多边形;问我们可以装下这个多边形的最小的正方形的边长是......
  • 数论
    数学质数,约数,欧拉函数,快速幂,扩展欧几里得算法,中国剩余定理,高斯消元,求组合数,容斥原理,博弈论等内容。质数质数的判定试除法O(sqrt(n))boolis_prime(intx){if(......
  • 算法学习笔记(数学):数论分块 + 容斥原理 + 莫比乌斯函数
    算法学习笔记(数学):数论分块+容斥原理+莫比乌斯函数这篇文章主要是要讲一道题目(链接在这里)以及梳理一下数论分块,莫比乌斯函数,容斥原理这些知识。先介绍下知识点吧qwq......
  • 做题记录整理数论1 P6102 [EER2]谔运算(2022/10/3)
    P6102[EER2]谔运算位运算题,但是就算进数论里面吧之前说dp是我学得最烂的(其实都没好到哪里去),现在发现原来数论才是。。。由于是看题解的,而且数论题看题解和白嫖也差不多......
  • 洛谷 CF550C Divisibility by Eight(DP/数论)
    遇事不决,小学数学。https://www.luogu.com.cn/problem/CF550C题目大意:给你一个位数不超过100的非负整数N(不含前导0)。你的任务是判断这个数字能否通过去掉其中......
  • ABC 246 D - 2-variable Function(数论/暴力)
    https://atcoder.jp/contests/abc246/tasks/abc246_d题目大意:给定一个数字N,让我们求出X,这个X要满足X>=N,并且X内部可以有一对(a,b)满足a^3+a^2*b+b^2*a+b^3。找出最......
  • 数学数论全集
    扩展欧几里得定理\[ax+by=(a,b);bx_0+(a\bmodb)y_0=(a,b);x=y_0;y=(a/b)y_0+b(x_0)\]证:\({a}x+{b}y=(a,b)=(b,a\bmodb)=bx+(a\bmodb)y=bx_0+(a-(a/b)b)y......