scau 8637 阶乘与因子 筛素数
时间限制:500MS 内存限制:1000K
提交次数:189 通过次数:46
题型: 编程题 语言: G++;GCC
Description
游戏玩了很久总会厌的,连Lyd的蚂蚁都被放生了......(参看题目:盒子上的蚂蚁)
于是Mr.Chen 看大家很无聊,就让Lord.Suno 负责新生赛出题的事情,然后大家一起帮忙出题。
Lyd 想了很久,想到一个题目,题意如下:
给出两个数,正整数n(n<10)和质数m(m<100),求满足n!=k * m^p 最大的整数p(k 为正
整数)。
题目拿给Suno看,他说,这也太简单了吧......三秒钟写完核心代码:
sum=1;p=0;
for(i=1;i<=n;i++)
sum*=i;
while(sum%m==0)
{
p++;
sum/=m;
}
Lyd 想,那n<1000 吧,这样sum太大就存不下了。。。Suno 说,那也简单,不存直接算,就算你来
个10000 的也不怕。十秒钟的事情:
p=0;
for(i=1;i<=n;i++)
{
q=i;
while(q%m==0)
{
p++;
q/=m;
}
}
-_-!!!
无奈之下Lyd 说,那m 不要质数了,不能直接除,然后增大规模,2<=m<5000,您能算不?Suno
想了想,说稍微处理一下,然后多用几次上面的代码,执行完再!@#$%^&*,就OK 啦......
被Suno 多次BS 之后,Lyd 说,好吧,n<10^8,用扫描1-n 的方法超时,不让你扫......Suno 说,
呃,这样会不会太难......Lyd 得意地笑了,嘿嘿这回不会了吧!Suno 回了一句,不用for 用另一种更快
的方法而已,m<10^6 都没问题,我的意思是这思路有点巧妙,当新生赛会不会太难?也行,就这样吧,
相信想得到的,反正题目是你出的,没人做得出是你郁闷。。。Lyd 再次囧......
输入格式
测试数据第一行是一个数T(T<=10000),表示测试数据的组数。
之后每一行代表一组测试数据。
每一组测试数据有两个数,n(0<n<10^8)和m(2<=m<10^6)。
输出格式
对于每组测试数据,输出一行,每行一个数,能满足n!=k * m^p 的最大的p。
输入样例
2
4 6
6 3
输出样例
1
2
提示
来源
lyd
作者
admin
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std; const int N = 1e6;
typedef long long ll;
int n, m, c;
int fr[N], p[], mp[];
int pri[N]= {};
int pnum = ; void pre()
{
for(int i = ; i < N; ++i) {
if(!fr[i]) {
pri[ pnum++ ] = i;
fr[i] = i;
}
for(ll j = ; j < pnum && i * pri[j] < N; ++j) {
fr[i * pri[j]] = pri[j];
if(!(i % pri[j])) break;
}
}
}
void get(int x) { /// 对x唯一分解,mp存储质因数序列,p存储每个质因数对应的个数
c = ; int t = -;
while(x > )
{
if(fr[x] != t) {
c++;
mp[c] = fr[x];
}
p[c]++;
t = fr[x];
x /= fr[x];
}
}
int calc(int k) { ///求1~n中能组成的k的个数
int cnt = ;
ll mult = k;
while(mult <= n)
{
cnt += n / mult;
mult = mult * k;
}
return cnt;
}
int main()
{ pre();
int _; scanf("%d", &_);
while(_ --)
{
scanf("%d%d", &n, &m);
memset(p, , sizeof p);
get(m);
int ans = 0x3f3f3f3f;
for(int i = ; i <= c; ++i)
{
ans = min(ans, calc(mp[i]) / p[i]);
}
printf("%d\n", ans);
}
return ;
}
scau 8637 阶乘与因子 筛素数的更多相关文章
- 【板子】gcd、exgcd、乘法逆元、快速幂、快速乘、筛素数、快速求逆元、组合数
1.gcd int gcd(int a,int b){ return b?gcd(b,a%b):a; } 2.扩展gcd )extend great common divisor ll exgcd(l ...
- Algorithm --> 阶乘和因子
阶乘和因子 要求:输入正整数n(1<n <101), 把阶乘n!=1x2x3x...xn分解成素因子相乘的形式,从小到大输出各个素数(2,3,5,...)的指数. 例如825=3x52x1 ...
- 【noi 2.7_413】Calling Extraterrestrial Intelligence Again(算法效率--线性筛素数+二分+测时)
题意:给3个数M,A,B,求两个质数P,Q.使其满足P*Q<=M且A/B<=P/Q<=1,并使P*Q最大.输入若干行以0,0,0结尾. 解法:先线性筛出素数表,再枚举出P,二分出对应 ...
- CF449C Jzzhu and Apples (筛素数 数论?
Codeforces Round #257 (Div. 1) C Codeforces Round #257 (Div. 1) E CF450E C. Jzzhu and Apples time li ...
- 洛谷P3383 【模板】线性筛素数
P3383 [模板]线性筛素数 256通过 579提交 题目提供者HansBug 标签 难度普及- 提交 讨论 题解 最新讨论 Too many or Too few lines 样例解释有问题 ...
- poj3126 筛素数+bfs
//Accepted 212 KB 16 ms //筛素数+bfs #include <cstdio> #include <cstring> #include <iost ...
- 洛谷 P3383 【模板】线性筛素数
P3383 [模板]线性筛素数 题目描述 如题,给定一个范围N,你需要处理M个某数字是否为质数的询问(每个数字均在范围1-N内) 输入输出格式 输入格式: 第一行包含两个正整数N.M,分别表示查询的范 ...
- POJ2689-Prime Distance-区间筛素数
最近改自己的错误代码改到要上天,心累. 这是迄今为止写的最心累的博客. Prime Distance Time Limit: 1000MS Memory Limit: 65536K Total S ...
- 线性筛素数和理解 洛谷P3383
题目链接:https://www.luogu.org/problemnew/show/P3383 线性筛法筛素数的特点是每一个数字只被遍历一次,即时间复杂度为O(n),所以说他是线性的,并且所有的非素 ...
随机推荐
- Gym 100703K Word order 贪心
题目链接 题意:给定一个长度为n的字符串,字符串仅由"F","N","A"三种字符组成,现有一种操作P,即把两个相邻的字符调换位置.要求把所 ...
- HDU 1087 Super Jumping! Jumping! Jumping! --- DP入门之最大递增子序列
DP基础题 DP[i]表示以a[i]结尾所能得到的最大值 但是a[n-1]不一定是整个序列能得到的最大值 #include <bits/stdc++.h> using namespace ...
- UVa1593_Allgnment_Of_Code
/** start: integer; // begins hear stop: integer; // ends here s: string; c: char; // temp **/ //测试数 ...
- NYOJ题目1080年龄排序
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAtMAAAJVCAIAAACTf+6jAAAgAElEQVR4nO3dO1Lj3NbG8W8Szj0QYg ...
- 理解Java中的引用传递和值传递
关于Java传参时是引用传递还是值传递,一直是一个讨论比较多的话题,有论坛说Java中只有值传递,也有些地方说引用传递和值传递都存在,比较容易让人迷惑.关于值传递和引用传递其实需要分情况看待,今天学习 ...
- linux中创建gpio节点
转自:http://blog.chinaunix.net/uid-29165999-id-4296162.html #define GPIO_MAJOR 230 // major device NO. ...
- ASP.NET Web API 全局权限和全局异常处理
在开发中,我使用json格式序列化,所以将默认的xml序列化移除 public static class WebApiConfig { public static void Register(Http ...
- pyinstaller打包pyqt文件
打包pyqt文件 如何将pyqt生成exe的二进制文件呢,pyinstaller就是这样的工具 可以将脚本文件.py 文件转换为编辑后的二进制文件,在进行发布 下面说下,如果打包 一. 安装: 下载地 ...
- 网站性能测试工具--MS Web Application Stress Tool
MS Web Applicaion Stress Tool 是一款网页测试的性能工具,具体的使用可以参考下面这篇博客文章 http://cuisuqiang.iteye.com/blog/193640 ...
- 图结构练习——最短路径(floyd算法(弗洛伊德))
图结构练习——最短路径 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 给定一个带权无向图,求节点1到节点n的最短路径. 输 ...