首页 > 其他分享 >约数

约数

时间:2024-04-02 22:11:23浏览次数:14  
标签:约数 ... cnt int ans x2 input

from math import sqrt
from collections import Counter
# ①试除法求约数

x = int(input())

ans = []

for i in range(1,int(sqrt(x)) + 1):
    if x % i == 0:
        ans.append(i)

print(ans)


# ②求多个数乘积的约数个数

n = int(input())
a = [*map(int,input().split())]
cnt = Counter()
MOD = pow(10,9) + 7
# 分解质因数,并得到每个质数的个数!
# n = x1 ^ p1 + x2 ^ p2 + ... + xn ^ pn
# cnt = (1 + p1) * (1 + p2) * ... * (1 + pn)
# 相当于排列组合,且由于是质数,每一个组合得到的约束唯一!
for x in a:
    i = 2
    while i * i <= x:
        while x % i == 0:
            x //= i
            cnt[i] += 1
        i += 1
    if x > 1:
        cnt[x] += 1

ans = 1
for p in cnt.values():
    ans = (ans * (1 + p)) % MOD
print(ans)


# ③求多个数乘积的约束之和

n = int(input())
a = [*map(int,input().split())]
cnt = Counter()
MOD = pow(10,9) + 7
# 分解质因数,并得到每个质数的个数!
# n = x1 ^ p1 + x2 ^ p2 + ... + xn ^ pn
# cnt = (1 + x1 + x1 ^ 2 + ... + x1 ^ p1) * (1 + x2 + x2 ^ 2 + ... + x2 ^ p2) * ... * ...

for x in a:
    i = 2
    while i * i <= x:
        while x % i == 0:
            x //= i
            cnt[i] += 1
        i += 1
    if x > 1:
        cnt[x] += 1

ans = 1
for x,cnt in cnt.items():
    tmp = 1
    # 秦九韶算法
    for _ in range(cnt):
        tmp = (tmp * x + 1) % MOD
    ans = ans * tmp % MOD
print(ans)

标签:约数,...,cnt,int,ans,x2,input
From: https://www.cnblogs.com/gebeng/p/18111619

相关文章

  • 求最大公约数的方法---pta---N个数求和
    公约数,简单来讲,可以被两个数都整除的一个数。最大公约数,就是两个数的所有公约数中最大的那一个。求得方法有很多,比如://枚举法inta,b,t;cin>>a>>b;for(inti=1;i<=min(a,b);i++){if(a%i==0&&b%i==0){t=i;}}cout<<t;//辗转相除法:inta,b,t;cin>>a>>b;......
  • 【前端面试3+1】07vue2和vue3的区别、vue3响应原理及为什么使用proxy、vue的生命周期
    一、vue2和vue3的区别1.性能优化:        Vue3在性能方面有很大的提升,主要是通过虚拟DOM的优化和响应式系统的改进实现的。虚拟DOM重构:Vue3中对虚拟DOM进行了重构,使得更新算法更加高效,减少了更新时的开销,提升了性能。静态树提升:Vue3可以通过静态树提升技术......
  • P8792 [蓝桥杯 2022 国 A] 最大公约数
    #include<iostream>#include<stdio.h>#include<algorithm>#include<string>#include<cmath>#defineFor(i,j,n)for(inti=j;i<=n;++i)usingnamespacestd;constintN=1e5+5;intgcd(intx,inty){re......
  • 求两个数的最大公约数 和 求两个数的最小公倍数
    求两个数的最大公约数题目内容:输入两个正整数num1和num2(不超过1000),求它们的最大公约数并输出。我们定义求最大公约数的函数为hcf,给出程序主体如下:num1=int(input(""))num2=int(input(""))print(hcf(num1,num2))请补充完成hcf函数的定义。 输入格式:共两行,每一行输入一......
  • P3327 [SDOI2015] 约数个数和
    题意求:\[\sum_{i=1}^n\sum_{j=1}^md(ij)\]其中\(d(n)\)代表\(n\)的约数个数。Sol考虑拆开\(d(ij)\),平凡的想法是考虑\(i\)和\(j\)分别对\(d(ij)\)提供因子。注意到若\(i\)能提供完因子\(p\),那么直接从\(i\)里取即可。否则需要在\(j\)里取因子......
  • 十 1360. 有序分数 (最大公约数|递归)
    1360.有序分数(最大公约数|递归)方法一思路:统计所有组合,并求其最大公约数是否为1,只有最大公约数为1的组合才成立,然后按组成的分数大小顺序排序。importjava.util.*;publicclassMain{privatestaticintgcd(inta,intb){returnb==0?a:gcd(b......
  • YBTOJ祭—质数与约数
    目录线性筛素数欧拉筛,老生常谈个人感觉放这道题的代码不如放板子//欧拉筛intprime[maxn];intfactor[maxn];intPrime(intn){intp=0;for(inti=2;i<=n;i++){if(!factor[i]){prime[p++]=i;factor[i]=i;......
  • NOJ南邮上机 最大公约数和最小公倍数 PROB1006 Python
    PROB1006  最大公约数和最小公倍数描述:求两个正整数的最大公约数和最小公倍数输入:两个正整数A,B输出:两个正整数的最大公约数、最小公倍数样例输入:43样例输出:112defmax_gcd(a,b):whileb!=0:temp=a%ba=bb=temp......
  • abc172D 约数之和
    题面:记f(x)表示x的约数个数,例如,12的约数有1,2,3,4,6,12共6个,因此f(12)=6。给定n,求\(\sum_{k=1}^{n}k*f(k)\)。范围:n<=1E7思路:用类似素数筛的做法预处理出所有f,然后遍历一次得到答案,时间复杂度O(nloglogn)。#include<bits/stdc++.h>usingnamespacestd;#defineintlonglon......
  • 246. 区间最大公约数
    #include<cstdio>#include<cstring>#include<iostream>#include<algorithm>usingnamespacestd;typedeflonglongLL;constintN=500010;intn,m;LLw[N];structNode{intl,r;LLsum,d;}tr[N*4];LLgcd(LL......