用唯一分解定理求m/n

用唯一分解定理求m/n,保证m能够被n整除;

这其中用到了素数筛以及快速幂

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e4+5;
bool vis[maxn];
int prime[maxn],cnt=0,e[maxn];
void getprime(){
    for(int i=2;i<maxn;++i){
        if(!vis[i])prime[++cnt]=i;
        for(int j=i*2;j<maxn;j+=i)
            vis[j]=1;
    }
}
void solve(int x,int d){
    for(int i=1;i<=cnt;++i){
        while(x>1&&x%prime[i]==0){
            x=x/prime[i];
            e[i]+=d;
        }
        if(x<=1)break;
    }
}
int qpow(int x,int cnt){
    int ans=1;
    while(cnt){
        if(cnt&1)ans*=x;
        x=x*x;
        cnt>>=1;
    }
    return ans;
}
int main()
{
    getprime();
    int m=10000,n=10;
    solve(m,1);
    solve(n,-1);
    int ans=1;
    for(int i=1;i<=cnt;++i){
        ans*=qpow(prime[i],e[i]);
    }
    printf("%d\n",ans);
    return 0;
}

  

原文地址:https://www.cnblogs.com/lengsong/p/11290619.html

时间: 2024-10-25 01:42:11

用唯一分解定理求m/n的相关文章

LightOJ 1341 - Aladdin and the Flying Carpet (唯一分解定理 + 素数筛选)

http://lightoj.com/volume_showproblem.php?problem=1341 Aladdin and the Flying Carpet Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Submit Status Practice LightOJ 1341 Description It's said that Aladdin had to solve seven

uva294(唯一分解定理)

题目链接: 唯一分解定理求约数. 1 #include<cstdio> 2 int L,R; 3 int cnt; 4 int pri[1010]; 5 int vis[1010]; 6 void is_pri() //预处理素数表 7 { 8 cnt=0; 9 for(int i=2;i<35;i++) if(!vis[i]) 10 for(int j=i*i;j<1010;j+=i) 11 vis[j]=1; 12 for(int i=2;i<1010;i++) if(!

hdu1215七夕节-(埃氏筛+唯一分解定理)

七夕节 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 56666    Accepted Submission(s): 18239 Problem Description 七夕节那天,月老来到数字王国,他在城门上贴了一张告示,并且和数字王国的人们说:"你们想知道你们的另一半是谁吗?那就按照告示上的方法去找吧!"人们纷纷来到告示

uva 10375 唯一分解定理 筛法求素数【数论】

唯一分解理论的基本内容: 任意一个大于1的正整数都能表示成若干个质数的乘积,且表示的方法是唯一的.换句话说,一个数能被唯一地分解成质因数的乘积.因此这个定理又叫做唯一分解定理. 举个栗子:50=(2^1)*(5^2) 题目一般的思路就是要把素数表打出来,eg上面的例子 e={1,0,2,0,0......} 下面是两个题目,仅说说大致的思想: 题目一: E=(X1*X3*X4* ...*Xk)/X2   判断E是不是整数 如果把(X1*X3*X4* ...*Xk)分解成素数相乘,将X2也分解成素

POJ1845Sumdiv(求所有因子和 + 唯一分解定理)

Sumdiv Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 17387   Accepted: 4374 Description Consider two natural numbers A and B. Let S be the sum of all natural divisors of A^B. Determine S modulo 9901 (the rest of the division of S by 99

【数论】Sumdiv(整数的唯一分解定理+约束和公式+递归求等比)

来源:https://blog.csdn.net/lyy289065406/article/details/6648539 题目描述 Consider two natural numbers A and B. Let S be the sum of all natural divisors of A^B. Determine S modulo 9901 (the rest of the division of S by 9901). 输入 The only line contains the t

hdu 1215 求约数和 唯一分解定理的基本运用

http://acm.hdu.edu.cn/showproblem.php?pid=1215 题意:求解小于n的所有因子和 利用数论的唯一分解定理. 若n = p1^e1 * p2^e2 * --*pn^en(任何一个数都可以分解成素数乘积) 则n的因子个数为  (1+e1)(1+e2)--(1+en) n的各个因子的和为(1+p1+p1^2+--+p1^e1)(1+p2+p2^2+--+p2^e2)--(1+pn+pn^2+--+pn^en) (把式子化简就知道为什么了) ac代码: #inc

HDU 1452 Happy 2004(唯一分解定理)

题目链接:传送门 题意: 求2004^x的所有约数的和. 分析: 由唯一分解定理可知 x=p1^a1*p2^a2*...*pn^an 那么其约数和 sum = (p1^0+p1^1^-+p1^a1)*-* (pn^0+pn^1^-+pn ) 代码如下: #include <iostream> #include <cstring> #include <algorithm> #include <cstdio> using namespace std; const

NOIP2009Hankson 的趣味题[唯一分解定理|暴力]

题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson.现 在,刚刚放学回家的 Hankson 正在思考一个有趣的问题. 今天在课堂上,老师讲解了如何求两个正整数 c1 和 c2 的最大公约数和最小公倍数.现 在 Hankson 认为自己已经熟练地掌握了这些知识,他开始思考一个“求公约数”和“求公 倍数”之类问题的“逆问题”,这个问题是这样的:已知正整数 a0,a1,b0,b1,设某未知正整 数 x 满足: 1. x 和 a0 的最大公约