UVA - 11388

题意:输入g和l,找到a和b,gcd(a,b)=g,lacm(a,b)=l,a<b且a最小


g不能整除l时无解,否则一定g,l最小

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
int T,g,l;
int main(int argc, const char * argv[]){
T=read();
while(T--){
g=read();l=read();
if(l%g) printf("-1\n");
else printf("%d %d\n",g,l);
}
return ;
}

PS:Luogup1029求数量的话可以依据a*b=g*l枚举

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
ll g,l;
int cnt=;
inline int gcd(int a,int b){
return b==?a:gcd(b,a%b);
}
int main(int argc, const char * argv[]) {
g=read();l=read();
ll n=g*l;
for(ll i=g;i<=l;i++){
if(n%i) continue;
ll j=n/i;
if(gcd(i,j)==g) cnt++;
}
printf("%d",cnt);
return ;
}



UVA - 11889

题意:输入A和C,求最小的B使lcm(A,B)=C


用唯一分解定理想

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
int a,l,T;
inline int gcd(int a,int b){return b==?a:gcd(b,a%b);}
int main(int argc, const char * argv[]) {
T=read();
while(T--){
a=read();l=read();
if(l%a) printf("NO SOLUTION\n");
else{
int b=l/a,g=gcd(a,b),t=;
while(g!=){
t*=g;
a/=g;
g=gcd(a,b);
}
printf("%d\n",b*t);
}
}
return ;
}



UVA - 10943

题意:k个不超过n的非负整数加起来和为n有几种方案


完全背包

f[i][j]表示i个数加起来和为j

转移可以从O(n)变O(1)

可以是f[i-1][j]+0,也可以是f[i][j-1]+1

f[i][j]=(f[i-1][j]+f[i][j-1])%MOD;
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const int N=,MOD=1e6;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
int n,m,f[N][N];
void dp(){
for(int i=;i<=;i++) f[i][]=;
for(int i=;i<=;i++)
for(int j=;j<=;j++)
f[i][j]=(f[i-][j]+f[i][j-])%MOD;
}
int main(int argc, const char * argv[]) {
dp();
while((n=read())){
m=read();
printf("%d\n",f[m][n]);
} return ;
}



UVA - 10791

题意:输入n,求至少两个正整数,使lcm=n


唯一分解定理分解后就是最优解,注意素数

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
int n;
ll sol(int n){
if(n==) return ;
int cnt=,m=sqrt(n)+;
ll ans=;
for(int i=;i<=m&&n!=;i++) if(n%i==){
cnt++;
ll d=;
while(n%i==) n/=i,d*=i;
ans+=d;
}
if(n>) cnt++,ans+=n;
if(cnt==) return ans+;
else return ans;
}
int main(int argc, const char * argv[]) {
int cas=;
while(scanf("%d",&n)!=EOF&&n){
printf("Case %d: %lld\n",++cas,sol(n));
}
return ;
}



UVA - 10780

题意: 输入n和m,求最大的k使m^k整除n!


唯一分解定理裸

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const int N=1e4+;
typedef long long ll;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
int T,m,n,e1[N],e2[N],p[N],vis[N],cnt=;
void era(int n){
int m=sqrt(n)+;
for(int i=;i<=m;i++) if(!vis[i])
for(int j=i*i;j<=n;j+=i) vis[j]=;
for(int i=;i<=n;i++) if(!vis[i]) p[++cnt]=i;
}
void divide(int n,int e[]){
for(int i=;i<=cnt&&n!=;i++) if(n%p[i]==){
int d=;
while(n%p[i]==) n/=p[i],d++;
e[i]+=d;
}
}
int main(int argc, const char * argv[]){
era();
T=read();int cas=;
while(T--){
printf("Case %d:\n",++cas);
memset(e1,,sizeof(e1));
memset(e2,,sizeof(e2));
m=read();n=read();
divide(m,e1);
for(int i=;i<=n;i++) divide(i,e2);
int flag=,k=,len=max(m,n);
for(int i=;i<=len;i++){//printf("%d %d %d\n",p[i],e1[i],e2[i]);
if(e1[i]>e2[i]){flag=;printf("Impossible to divide\n");break;}
if(e2[i]!=&&e1[i]!=) k=min(k,e2[i]/e1[i]);
}
if(!flag) printf("%d\n",k);
} return ;
}

UVA数学入门训练Round1[6]的更多相关文章

  1. 入门训练 Fibonacci数列

      入门训练 Fibonacci数列   时间限制:1.0s   内存限制:256.0MB 问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时, ...

  2. 蓝桥杯 入门训练 Fibonacci数列(水题,斐波那契数列)

    入门训练 Fibonacci数列 时间限制:1.0s   内存限制:256.0MB 问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非 ...

  3. 入门训练 A+B问题

    http://lx.lanqiao.org/problemset.page?code=BEGIN-&userid=34549   入门训练 A+B问题   时间限制:1.0s   内存限制:2 ...

  4. 蓝桥杯 入门训练 Fibonacci数列

      入门训练 Fibonacci数列   时间限制:1.0s   内存限制:256.0MB        问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. ...

  5. 【蓝桥杯】入门训练 Fibonacci数列

      入门训练 Fibonacci数列   时间限制:1.0s   内存限制:256.0MB        问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. ...

  6. 入门训练 Fibonacci数列 (水题)

    入门训练 Fibonacci数列   时间限制:1.0s   内存限制:256.0MB        问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n ...

  7. lqb 入门训练 A+B问题

    入门训练 A+B问题 时间限制:1.0s   内存限制:256.0MB     问题描述 输入A.B,输出A+B. 说明:在“问题描述”这部分,会给出试题的意思,以及所要求的目标. 输入格式 输入的第 ...

  8. lqb 入门训练 序列求和 (PS:用长整数做数据的输入输出)

    入门训练 序列求和 时间限制:1.0s   内存限制:256.0MB     问题描述 求1+2+3+...+n的值. 输入格式 输入包括一个整数n. 输出格式 输出一行,包括一个整数,表示1+2+3 ...

  9. lqb 入门训练 圆的面积 (PS: PI的精确计算方法 atan(1.0) * 4)

    入门训练 圆的面积 时间限制:1.0s   内存限制:256.0MB     问题描述 给定圆的半径r,求圆的面积. 输入格式 输入包含一个整数r,表示圆的半径. 输出格式 输出一行,包含一个实数,四 ...

随机推荐

  1. form表单中enctype="multipart/form-data"的作用

    在我们使用php导入和导出excel表格的时候经常会见到 enctype="multipart/form-data",哪他的作用是什么呢? ENCTYPE="multip ...

  2. 【nodejs笔记3】Express基本用法,和路由控制,和模板渲染ejs

    1. 路由控制的工作原理 //routes/index.js中的代码//访问主页时,调用ejs模板引擎,渲染index.ejs模板文件,生成静态页面,并显示在浏览器中.router.get('/', ...

  3. java中的对象,类。与 方法的重载。

    对象: 一切皆为对象.对象包括两部分内容:属性(名词形容词),行为(动词).对象和对象之间是有关系的: 派生,关联,依赖. 类: 对同一类别的众多对象的一种抽象.类,还是用来生成对象的一种模板,对象是 ...

  4. JavaEE中Web服务器、Web容器、Application服务器区别及联系

    在JavaEE 开发Web中,我们经常会听到Web服务器(Web Server).Web容器(Web Container).应用服务器(Application Server),等容易混淆不好理解名词. ...

  5. css限制单行文本输入,超出部分使用...替换

    在实际应用中,经常需要只显示一行文字,不允许文字换行破坏整体样式的情况.例如'商品的名称','简介'等等.但是由于显示器的宽度不一样,会出现后台所给文字内容,一行文本容纳不下的情况.溢出的文本如果使用 ...

  6. JavaScript中Array类型方法总结

    Array类型是ECMAScript中最常用的类型之一,ECMAScript中的数组与其他多数语言中的数组有着相当大的区别.ECMAScript数组的每一项可以保存任何类型的数据.这里总结了数组类型的 ...

  7. iOS 封装添加按钮的方法

    添加按钮 #pragma mark 添加按钮 - (void)addButtonWithImage:(NSString *)image highImage:(NSString *)highImage ...

  8. Atitit.常见软件 数据 交换格式 标准

    Atitit.常见软件 数据 交换格式 标准 1. 常见的数据格式txt ,doc ,pic,music ,vodio1 2. 通用格式json yaml phpstr1 3. 专用格式1 4. 用户 ...

  9. ArcGIS Server的Tile的松散型存储(Exploded)

    protected override void GetTileSource(int level, int row, int col, Action<System.Windows.Media.Im ...

  10. __block 和 __weak的区别

    Blocks理解: Blocks可以访问局部变量,但是不能修改 如果修改局部变量,需要加__block __block int multiplier = 7; int (^myBlock)(int) ...