/*
要求出[1,R]之间的质数会超时,但是要判断[L,R]之间的数是否是素数却不用筛到R
因为要一个合数n的最大质因子不会超过sqrt(n)
所以只要将[2,sqrt(R)]之间的素数筛出来,再用这些素数去筛[L,R]之间的合数即可
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
#define ll long long ll L,R,ans[];
int v[],prime[],m,isprime[];
void init(int n){
memset(v,,sizeof v);
m=;
for(int i=;i<=n;i++){
if(v[i]==){
v[i]=i;
prime[++m]=i;
}
for(int j=;j<=m;j++){
if(prime[j]>v[i] || prime[j]>n/i) break;
v[i*prime[j]]=prime[j];
}
}
} int main(){
init();//打表求出[2,10^7]之内的质数
while(scanf("%lld%lld",&L,&R)==){
if(L==) L=;
memset(isprime,,sizeof isprime);
for(ll i=;i<=m;i++){
if(prime[i]>sqrt(R)+)break;//超过sqrt(R)的质数就不用筛了
for(ll j=(L-)/prime[i]+;prime[i]*j<=R;j++)
if(j>)isprime[prime[i]*j-L]=;
} ll L1,R1,L2,R2,Max=-,Min=,tot=;
for(ll i=;i<=R-L;i++)
if(!isprime[i]) ans[tot++]=i+L; if(tot<=) {
puts("There are no adjacent primes.");
continue;
}
for(int i=;i<tot;i++){
if(Max<ans[i]-ans[i-]){
Max=ans[i]-ans[i-];
L1=ans[i-],R1=ans[i];
}
if(Min>ans[i]-ans[i-]){
Min=ans[i]-ans[i-];
L2=ans[i-],R2=ans[i];
}
}
printf("%lld,%lld are closest, %lld,%lld are most distant.\n",L2,R2,L1,R1);
}
}
/*阶乘分解:给定一个n,求分解n!的质因数,输出总共有多少质因数
思路:筛出1-N所有的质因数,质因数p在n!中出现的次数即p在1-n所有数中出现的次数之和,那么p出现了n/p次,p*p出现了n/p*p次,。。累加即可
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
#define ll long long int n,m,prime[],v[];
void init(int n){
memset(prime,,sizeof prime);
memset(v,,sizeof v);
m=;
for(int i=;i<=n;i++){
if(v[i]==){
v[i]=i;
prime[++m]=i;
}
for(int j=;j<=m;j++){
if(prime[j]>v[i] || prime[j]*i>n) break;
v[i*prime[j]]=prime[j];
}
}
} int main(){
init();
while(scanf("%d",&n)==){
ll ans=;
for(int i=;i<=m;i++){
if(prime[i]>n) break;
int j=prime[i];
while(j<=n){
ans+=n/j;
j*=prime[i];
}
}
printf("%d\n",ans);
}
}
//质数筛法
/*Era筛:
复杂度:O(nloglogn)非常接近线性
原理:任何质数x的倍数:2x,3x,...都是合数,优化后只要筛 >=x*x的数即可
*/
void primes(int n){
memset(v,,sizeof v);//合数标记
for(int i=;i<=n;i++){
if(v[i]) continue;
for(int j=i;i*j<=n;j++) v[i*j]=;
}
} /*
线性筛
复杂度:O(n)
原理:每个数只被它最小的数筛一次
*/
void primes(int n){
memset(v,,sizeof v);//每个数的最小质因子
memset(prime,,sizeof prime);//质数集合
m=;//质数数量
for(int i=;i<=n;i++){
if(v[i]==){//i是质数
v[i]=i;
prime[++m]=i;
}
for(int j=;j<=m;j++){
if(prime[j]>v[i] || prime[j]*i>n) break;//如果i有比prime[j]小的质因子,或者超出n范围
v[i*prime[j]]=prime[j];//prime[j]是i*prime[j]的最小质因子
}
}
} //质因数分解
/*
试除法
复杂度:O(sqrt(N))
原理:对于给定的n,枚举[2,sqrt(n)]中的每个数d,若n能整除d,则把n中所有的d除去
*/
void divide(int n){
memset(p,,sizeof p);//n的质因子
memset(c,,sizeof c);//个质因子的幂
m=;
for(int i=;i<=sqrt(n);i++){
if(n%i==){//i必定是质数
p[++m]=i,c[m]=;
while(n%i==)n/=i,c[m]++;
}
}
if(n>) p[++m]=n,c[m]=;//n是质数
}

hdu1124求阶乘的尾零

/*
阶乘求尾零
那就只要求出n!阶乘质因数分解后有多少2和5即可
*/
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll ans,n,ans1,ans2;
int main(){
int T;
cin>>T;
for(int tt=;tt<=T;tt++){
cin>>n;
ans1=ans2=;
ll tmp=n;
while(n>=)
ans1+=n/,n/=;
while(tmp>=)
ans2+=tmp/,tmp/=;
ans=min(ans1,ans2);
cout<<ans<<endl;
}
}

light1138 二分答案,最后不要忘记验证答案,

#include<bits/stdc++.h>
using namespace std;
#define maxn 100005
#define ll long long
ll n;
int judge(ll mid){
ll res=;
while(mid>=)
res+=mid/,mid/=;
if(res>=n)return ;
return ;
}
int main(){
int T;
cin>>T;
for(int tt=;tt<=T;tt++){
cin>>n;//要有n个5因子
ll mid,l=,r=,ans=-;
while(l<=r){
mid=l+r>>;
if(judge(mid))
ans=mid,r=mid-;
else l=mid+;
} if(ans!=-){
ll tmp=ans,cnt=;
while(tmp>=)
cnt+=tmp/,tmp/=;
if(cnt!=n)ans=-;
} if(ans!=-)
printf("Case %d: %lld\n",tt,ans);
else printf("Case %d: impossible\n",tt);
}
}

数论-质数 poj2689,阶乘分解,求阶乘的尾零hdu1124, 求尾零为x的最小阶乘的更多相关文章

  1. 将n(0<=n<=10000)的阶乘分解质因数,求其中有多少个m

    给定两个数m,n,其中m是一个素数. 将n(0<=n<=10000)的阶乘分解质因数,求其中有多少个m. 输入 第一行是一个整数s(0<s<=100),表示测试数据的组数 随后 ...

  2. LightOJ 1340 - Story of Tomisu Ghost 阶乘分解素因子

    http://www.lightoj.com/volume_showproblem.php?problem=1340 题意:问n!在b进制下至少有t个后缀零,求最大的b. 思路:很容易想到一个数通过分 ...

  3. luogu1445 [violet]樱花 阶乘分解

    题目大意 求方程$$\frac{1}{x}+\frac{1}{y}=\frac{1}{N!}$$的正整数解的组数. 思路 咱们把式子整理得$$xy-(x+y)N!=0$$.$xy$和$x+y$?貌似可 ...

  4. Pairs Forming LCM (LightOJ - 1236)【简单数论】【质因数分解】【算术基本定理】(未完成)

    Pairs Forming LCM (LightOJ - 1236)[简单数论][质因数分解][算术基本定理](未完成) 标签: 入门讲座题解 数论 题目描述 Find the result of t ...

  5. NYOJ 35 表达式求值(逆波兰式求值)

    http://acm.nyist.net/JudgeOnline/problemset.php?typeid=4 NYOJ 35 表达式求值(逆波兰式求值) 逆波兰式式也称后缀表达式. 一般的表达式求 ...

  6. 求包含每个有序数组(共k个)至少一个元素的最小区间

    title: 求包含每个有序数组(共k个)至少一个元素的最小区间 toc: false date: 2018-09-22 21:03:22 categories: OJ tags: 归并 给定k个有序 ...

  7. AcWing 197. 阶乘分解 (筛法)打卡

    给定整数 N ,试把阶乘 N! 分解质因数,按照算术基本定理的形式输出分解结果中的 pipi 和 cici 即可. 输入格式 一个整数N. 输出格式 N! 分解质因数后的结果,共若干行,每行一对pi, ...

  8. 【BZOJ-4522】密钥破解 数论 + 模拟 ( Pollard_Rho分解 + Exgcd求逆元 + 快速幂 + 快速乘)

    4522: [Cqoi2016]密钥破解 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 290  Solved: 148[Submit][Status ...

  9. LightOJ - 1138 (二分+阶乘分解)

    题意:求阶乘尾部有Q(1 ≤ Q ≤ 108)个0的最小N 分析:如果给出N,然后求N!尾部0的个数的话,直接对N除5分解即可(因为尾部0肯定是由5*2构成,那么而在阶乘种,2的因子个数要比5少,所以 ...

随机推荐

  1. django中命令行调试程序

    (1)进入到程序manage.py所在的目录下 (2)python manage.py shell 这样可在命令行中引入models.views.class等所有的包,然后进行命令行试运行.

  2. 多线程Java Socket编程

    采用Java 5的ExecutorService来进行线程池的方式实现多线程,模拟客户端多用户向同一服务器端发送请求. 1.服务端 package localSocket; import java.i ...

  3. 面向对象【day07】:类的继承(七)

    本节内容 1.概述 2.类的继承 3.总结 4.练习 一.概述 之前我们说到了类的公有属性和类的私有属性,其实就是类的封装,下面我们来讲讲继承,是面向对象的第二大特性. 面向对象编程 (OOP) 语言 ...

  4. JVM总结(四):JVM类加载机制

    这一节我们来总结一下JVM类加载机制.具体目录如下: 类加载的过程 类加载过程概括 说说引用 详解类加载全过程: 加载 验证 准备 解析 初始化 虚拟机把描述类的数据从Class文件加载到内存,并对数 ...

  5. git协同开发

    当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin. 要查看远程库的信息,用git remote: [root@w ...

  6. 设置MyBatis在控制台打印SQL语句

    在调试阶段,打印SQL会极大方便开发者.MyBatis有提供配置,只需要在MyBatis的配置文件mybatis-config.xml中<configuration>节点下,添加如下配置: ...

  7. Neo4j安装&入门&一些优缺点

    本篇将介绍Neo4j的安装,入门,和自己使用了一段时间后发现的优点缺点,争取简洁和实用. 如果你是第一次接触Neo4j,并且之前也都没接触过类似的Graph Database的话,建议先浏览一下我之前 ...

  8. windows 查看链接数

    windows 端口链接数  查看有效 链接数: netstat -an|find " |find "ESTABLISHED" /c /c 统计: 查看链接信息: 查看当 ...

  9. HDU1233 还是畅通工程【最小生成树】

    题意: 求出连接各个村庄最小的公路总长度,把最小公路总长度求出来. 思路: 最小生成树原理,带入数据求得. 代码: prim: #include<iostream> #include< ...

  10. POJ 1061 青蛙的约会 (扩展欧几里得算法)

    题目链接 Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件 ...