快速求n的质因子(数论)】的更多相关文章

快速求n的质因子 如何尽快地求出n的质因子呢?我们这里又涉及两个好的算法了! 第一个:用于每次只能求出一个数的质因子,适用于题目中给的n的个数不是很多,但是n又特别大的 #include<stdio.h> int main() { __int64 a[100],num,i,n; while(scanf("%I64d",&n)!=EOF) { num=0; for(i=2;i*i<=n;i++) { if(n%i==0) { a[num++]=i; while(…
题目链接:http://poj.org/problem?id=2992 题目要求:Your task in this problem is to determine the number of divisors of Cnk. Just for fun -- or do you need any special reason for such a useful computation? 题目解析:这题也是TLE了无数遍,首先说一下求因子数目的函数是积性函数,积性函数即f(n)=f(a)*f(b)…
题目大意很简单,给你一个整数X,让你求a和b,使得max(a,b)尽可能的小,然后打印a,b 题解:想到了质因子分解,也考虑到了暴力,但是觉得暴力的话会TLE,所以打算用贪心做,然后就一直Wa.......看人家的题解,,就是暴力..将求出的质因子分为两部分即可 #include<bits/stdc++.h> using namespace std; typedef long long ll; ll M=1E12+; ; ll arr[N]; ll pos=; bool mp[N]; ll a…
本题涉及博弈论中的Nim游戏博弈. Nim游戏博弈详解链接: http://www.cnblogs.com/exponent/articles/2141477.html 本题解题报告详解链接: http://blog.csdn.net/woshi250hua/article/details/7824609 我的代码,写的较挫,4000多ms,压着时间过,时间限制是5s.我预处理了所有1-5*10^6的数的素因子个数,用的是dp 的思想,先预处理1-5*10^6的数的最小素因子,存在a数组中,然后…
谁是英雄 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 十个数学家(编号0-9)乘气球飞行在太平洋上空.当横越赤道时,他们决定庆祝一下这一壮举.于是他们开了一瓶香槟.不幸 的是,软木塞在气球上打了一个洞,氢气泄漏,气球开始下降,眼看就要落入海中,所有人将要被鲨鱼吃掉. 但是尚有一线生机--若其中一人牺牲自己跳下去的话,那他的朋友们还能多活一会儿.但仍然有一个问题存在--谁 跳下去?所以他们想了一个非常公平的办法来解决这个问题--首先,每人写一个整数ai:然后计 算…
/* * 大整数分解到现在都是世界级的难题,但却是一个重要的研究方向,大整数在公共密钥的研究上有着重要的作用 * Pollard Rho算法的原理就是通过某种方法得到两个整数a和b.而待分解的大整数为n,计算p=gcd(abs(a-b),n),直到p不为1或者a,b出现循环为止. * 然后再判断是否为n,如果p==n||p==1,那么返回n时一个质数 * 否则p就是n的一个因子 * 那么我们又可以递归地计算Pollard(p)和Pollard(n/p). * 最后就可以推出n的所有质因子 * *…
试题 算法提高 Monday-Saturday质因子 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 这个问题是个简单的与数论有关的题目,看起来似乎是"求正整数的所有质因子",但实际上并不完全是这样. 本题中需要定义以下几个概念: 1. Monday-Saturday数 对于一个正整数N,如果它除以7得到的余数是1或6,则可以写成N=7k+{1,6}的形式.更形象的,我们把这样的N称作"Monday-Saturday数",简称"MS数&q…
RGCDQ 题意:F(x)表示x的质因子的种数.给区间[L,R],求max(GCD(F(i),F(j)) (L≤i<j≤R).(2<=L < R<=1000000) 题解:可以用素数筛求质因子种数(这不用多说,看下代码init()中内容就能理解).然而R的范围太大,会TLE.因此只能用空间换时间了. 可以用一个二维数组num[i][j] 保存x<=i&&F(x)=j的x的个数.(预处理,有点dp的思想) 2*3*5*7*11*13*17 > 10 ^ 6…
3181: [Coci2012]BROJ Time Limit: 10 Sec   Memory Limit: 64 MB Submit: 26   Solved: 7 [ Submit][ Status] Description 求最小质因子等于p的第n小的正整数(恰好有n-1个最小质因子等于p且比它 小的正整数).p一定是质数.若答案超过10^9则输出0. Input   Output   Sample Input 2 3 Sample Output 9 HINT 1 <= n, p <=…
题目链接:pid=1084">点击打开链接 寒假安排 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 128000/64000 KB (Java/Others) SubmitStatistic Next Problem Problem Description 寒假又快要到了,只是对于lzx来说,头疼的事又来了,由于众多的后宫都指望着能和lzx约会呢,lzx得安排好计划才行. 如果lzx的后宫团有n个人.寒假共同拥有m天,而每天仅仅能…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4497 题意:已知GCD(x, y, z) = G,LCM(x, y, z) = L.告诉你G.L,求满足要求的(x, y, z)有多少组,并且要考虑顺序. 思路:如果L%G != 0显然不存在这样的(x, y, z),相反肯定存在.具体做法就是将L/G分解质因子,得到:L/G = P1^t1 * P2^t2 * ... * Pk^tk,我们来考虑任意一个因子Pi^ti,此时(x/G, y/G, z/…
<题目链接> 题目大意: 给定区间[A,B](1 <= A <= B <= 10 15)和N(1 <=N <= 10 9),求出该区间中与N互质的数的个数. 解题分析: 将求区间[A,B]与N互质的数转化成求[1,B] 区间与N互质的个数  -  [1,A-1]中与N互质的个数.同时,因为直接求区间内与N互质的数不好求,我们从反面入手,求出与N不互质的数,借鉴埃筛的思想,我们先求出N的所有质因子,然后将这些质因子在区间内倍数的个数全部求出(即与N不互质的数),再用…
对于一个数n 设它有两个不是互质的因子a和b   即lcm(a,b) = n 且gcd为a和b的最大公约数 则n = a/gcd * b: 因为a/gcd 与 b 的最大公约数也是n 且 a/gcd + b < a + b 又因为a/gcd 与 b 互质  所以n的最小的因子和为 所有质因子的和 同理推广到多个质因子 由算术基本定理求出所有的质因子 则 nut = 所有质因子 ^ 个数 的和  自己想一想为什么把... 注意n为1时 #include <iostream> #includ…
问题描述有一个数列,FancyCoder沉迷于研究这个数列的乘积相关问题,但是它们的乘积往往非常大.幸运的是,FancyCoder只需要找到这个巨大乘积的最小的满足如下规则的因子:这个因子包含大于两个因子(包括它本身:比如,4有3个因子,因此它是满足这个要求的一个数).你需要找到这个数字并输出它.但是我们知道,对于某些数可能没有这样的因子:在这样的情况下,请输出-1. 这个因子包含大于两个因子也就是说必须包含三个因子可以为本身求出所有数的所有质因子中最小的两个,相乘就是答案.如果所有数字的质因子…
整数分解,又称质因子分解.在数学中,整数分解问题是指:给出一个正整数,将其写成几个素数的乘积的形式. (每个合数都可以写成几个质数相乘的形式,这几个质数就都叫做这个合数的质因数.) .试除法(适用于范围比较小) 无论素数判定还是因子分解,试除法(Trial Division)都是首先要进行的步骤.令m=n,从2~根n一一枚举,如果当前数能够整除m,那么当前数就是n的素数因子,并用整数m 将当前数除尽为止. 若循环结束后m是大于1的整数,那么此时m也是n的素数因子. 事例如HDU1164:15mm…
一.题目链接 https://www.nowcoder.com/acm/contest/90/F 二.题面 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 给定n,求1/x + /y = /n (x<=y)的解数.(x.y.n均为正整数) 输入描述: 在第一行输入一个正整数T. 接下来有T行,每行输入一个正整数n,请求出符合该方程要求的解数. (<=n<=1e9) 输出描述: 输出符…
[HDU4135]Co-prime 题意 给出三个整数N,A,B.问在区间[A,B]内,与N互质的数的个数.其中N<=10^9,A,B<=10^15. 分析 容斥定理的模板题.可以通过容斥定理求出[1,n]与x互质的数的个数.方法是先将x进行质因子分解,然后对于每个质因子pi,[1,n]内可以被pi整除的数目为n/pi.可以通过容斥定理解决逆命题,既[1,n]与x不互质的数目.n/p1+n/p2+n/p3-n/p1p2-n/p1p3-n/p2p3+n/p1p2p3.既奇数是加,偶数是减.具体的…
static int length1(int num) //想着要定义一个函数取,质因子数组的长度 { ; ; i <= num; i++) //for循环中I 不会归零 只能遍历一次 { if (num == i) { arrayLength++; break;//只要 因子等于i了,说求到头了,跳出循环(要不还会执行下一个IF) } ) { arrayLength++; num = num / i; i = ;//因为得出的新的num 需要重新与i=2比较,所以手动赋值为1.. } } re…
D. Soldier and Number Game time limit per test 3 seconds memory limit per test 256 megabytes input standard input output standard output Two soldiers are playing a game. At the beginning first of them chooses a positive integer n and gives it to the…
题意:求A的B次方的后三位数字 思路1:常规求幂,直接取余求解 代码: #include<iostream> #include<cstdio> using namespace std; int main(){ int a,b; int ans; while(~scanf("%d%d",&a,&b)){ &&b==) break; a=a%;//底数取余 ans=; while(b--){ ans=(ans*a)%;//结果取余 }…
/* 因为质因子很少 状态转移时用dp[u][i]表示结点u的第i个质因子所在的最大深度即可 等价于带限制的求直径 */ #include<bits/stdc++.h> #include<vector> using namespace std; #define maxn 200005 int n,a[maxn],ans; vector<int>G[maxn],p[maxn],dp[maxn]; void dfs(int u,int pre){ ;i<G[u].si…
先分解质因数,对于当前a[i],假设当前的质因数为x,这个位置要满足能被k整除,有两个可能,要么是它向后一个转移x%k个,要么是后一个向它转移k-x%k个. 对于每一个a[i]满足后,因为只会对下一个位置产生影响,所以下一个位置a[i+1]算上a[i]产生的影响,之后又是一个新的子问题(禁止套娃). 对于每一个质因数x,对所有所有位置i求min(a[i],x-a[i])的和,取所有质因子i的求和的最小值作为答案. #define HAVE_STRUCT_TIMESPEC #include<bit…
今天讲个有趣的算法:如何快速求 \(n^m\),其中 n 和 m 都是整数. 为方便起见,此处假设 m >= 0,对于 m < 0 的情况,求出 \(n^{|m|}\) 后再取倒数即可. 另外此处暂不考虑结果越界的情况(超过 int64 范围). 当然不能用编程语言的内置函数,我们只能用加减乘除来实现. n 的 m 次方的数学含义是:m 个 n 相乘:n*n*n...*n,也就是说最简单的方式是执行 m 次乘法. 直接用乘法实现的问题是性能不高,其时间复杂度是 O(m),比如 \(3^{29}…
总时间限制:  1000ms 内存限制:  65536kB 描述 任意输入两个正整数m, n (1 < m < n <= 5000),依次输出m到n之间每个数的最大质因子(包括m和n:如果某个数本身是质数,则输出这个数自身). 输入 一行,包含两个正整数m和n,其间以单个空格间隔. 输出 一行,每个整数的最大质因子,以逗号间隔. 样例输入 5 10 样例输出 5,3,7,2,3,5 还是水题.. 查看 #include <iostream> #include <cstr…
The problem statement is very easy. Given a number n you have to determine the largest power of m,not necessarily prime, that divides n!.InputThe input file consists of several test cases. The first line in the file is the number of cases to handle.The…
问题描述: 林记在做数学习题的时候,经常遇到这种情况:苦思冥想了很久终于把问题解出来,结果发现答案是0,久而久之林记在得到习题答案是0的时候就没有了做出一道难题的成就感.于是林记决定:以后出题,答案一定不能是0,例如求n!最低位非零数这样的习题就很不错了. 现在林记提出了一个更难一点的问题:求n!在K进制下的最低位非零数.其中K符合一些特殊的条件:K是由若干个互不相同的质数相乘得出来的,例如K=2,3,5,6,7,10…… 输入格式: 首先输入的第一行是一个整数Q,表示询问的个数. 接下来是Q个…
接触ACM没几天,向各路大神求教,听说ACM主要是研究算法,所以便开始了苦逼的算法学习之路.话不多说,RT所示,学习快速求幂. 在头文件<math.h>或是<cmath>中,double pow( double x, double y );函数是用来快速求x^y,于是便从pow函数来说起,以下大体上是pow的函数代码: int pow(int x, int n) { int num = 1; while (n != 0){ num = num *x; n = n -1; } ret…
#include<cstdio> #include<cmath> using namespace std; #define Max(x, y) (x > y ? x : y) int main() { int n, m; while(~scanf("%d",&n)) //1没有最大质因子 { int tn = n; ; ; i*i<=n; i++) { ) { mx = Max(mx, i); ) n /= i; } } mx = Max(m…
/** 大意: 求[a,b] 之间 phi(a) + phi(a+1)...+ phi(b): 思路: 快速求欧拉函数 **/ #include <iostream> #include <cstring> using namespace std; #define Max 3000000 ]; ]; ]; void init() { ; memset(flag,,sizeof(flag)); phi[]=; ;i<=Max;i++)//欧拉筛选 { if(flag[i]) {…
次方求模 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 求a的b次方对c取余的值   输入 第一行输入一个整数n表示测试数据的组数(n<100)每组测试只有一行,其中有三个正整数a,b,c(1=<a,b,c<=1000000000) 输出 输出a的b次方对c取余之后的结果 样例输入 3 2 3 5 3 100 10 11 12345 12345 样例输出 3 1 10481 /* Name: NYOJ--102--次方求模 Copyright: ©20…