UVA1635-唯一分解定理的基本应用2
原题:https://vjudge.net/problem/UVA-1635
这是一个极其典型的“从素因子角度出发”的题目,下面是我的代码:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std; const int maxn = 1e5 + ;
int md[],mz[];
int ans[maxn];
int n,m,lenth;
int c[]; bool check(int n,int i)
{
int x=n-i;
int y=i;
for(int k=;k<lenth;k++)
{
int p=md[k];
while(x%p==)
{
x/=p;
c[k]++;
}
while(y%p==)
{
y/=p;
c[k]--;
}//上下两个循环不能合并,因为这是一个递增积累过程,
}//也正因如此才需要额外开辟一个数组c.
for(int k=;k<lenth;k++)
if(c[k]<mz[k])return false;
return true;
} int factor()
{//用来分解m
memset(md,,sizeof(md));
memset(mz,,sizeof(mz));
int c=m,cur=;
int p=sqrt(c);
for(int i=;i<=p;i++)
{
bool ok=false;
while(c%i==)
{
md[cur]=i;
mz[cur]++;
c/=i;
ok=true;
}
if(ok)cur++;
if(c==)break;
}
if(c>)md[cur]=c,mz[cur]=,cur++;
return cur;
} int main()
{
//freopen("input.txt","r",stdin);
//freopen("text.txt","w",stdout);
while(cin>>n>>m)
{
lenth=factor();//一开始忘记了记录lenth
int cnt=;
memset(c,,sizeof(c));
//
for(int i=;i<n-;i++)
if(check(n,i))ans[cnt++]=i+;
printf("%d\n",cnt);
for(int i=;i<cnt;i++)
{
if(i>)printf(" ");
printf("%d",ans[i]);
}
printf("\n");
}
return ;
}
UVA1635-唯一分解定理的基本应用2的更多相关文章
- 【组合数的唯一分解定理】Uva1635
给出n.m,求得最终求和数列an=C(n-1,0)*x1 + C(n-1,1)*x2+...+C(n-1,n-1)*xn; 若xi与m无关,则an除以m的余数与xi无关,即余数不含xi的项: 输入:n ...
- Irrelevant Elements UVA - 1635 二项式定理+组合数公式+素数筛+唯一分解定理
/** 题目:Irrelevant Elements UVA - 1635 链接:https://vjudge.net/problem/UVA-1635 题意:給定n,m;題意抽象成(a+b)^(n- ...
- NOIP2009Hankson 的趣味题[唯一分解定理|暴力]
题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson.现 在,刚刚放学回家的 Hankson 正在思考一个有趣的问题. 今天在课堂上,老师讲 ...
- UVA - 10375 Choose and divide[唯一分解定理]
UVA - 10375 Choose and divide Choose and divide Time Limit: 1000MS Memory Limit: 65536K Total Subm ...
- uva10375 Choose and Divide(唯一分解定理)
uva10375 Choose and Divide(唯一分解定理) 题意: 已知C(m,n)=m! / (n!*(m-n!)),输入整数p,q,r,s(p>=q,r>=s,p,q,r,s ...
- 1341 - Aladdin and the Flying Carpet ---light oj (唯一分解定理+素数筛选)
http://lightoj.com/volume_showproblem.php?problem=1341 题目大意: 给你矩形的面积(矩形的边长都是正整数),让你求最小的边大于等于b的矩形的个数. ...
- UVA 10375 Choose and divide【唯一分解定理】
题意:求C(p,q)/C(r,s),4个数均小于10000,答案不大于10^8 思路:根据答案的范围猜测,不需要使用高精度.根据唯一分解定理,每一个数都可以分解成若干素数相乘.先求出10000以内的所 ...
- 唯一分解定理 poj 1365
一行代表一个数 x 给你底数和指数 求x-1的唯一分解定理的底数和指数 从大到小输出 #include<stdio.h> #include<string.h> #include ...
- UVA294DIvisors(唯一分解定理+约数个数)
题目链接 题意:输入两个整数L,U(L <= U <= 1000000000, u - l <= 10000),统计区间[L,U]的整数中哪一个的正约数最多,多个输出最小的那个 本来 ...
- POJ1845Sumdiv(求所有因子和 + 唯一分解定理)
Sumdiv Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 17387 Accepted: 4374 Descripti ...
随机推荐
- ROS可视化工具RViz的简单使用教程
1.安装rviz sudo apt-get install ros-melodic-rviz 环境检测.安装 rosdep install rviz rosmake rviz startup(开两个 ...
- java加解密算法--DES
ECB import sun.misc.BASE64Decoder; import javax.crypto.*; import javax.crypto.spec.DESKeySpec; impor ...
- 如何优雅的将Mybatis日志中的Preparing与Parameters转换为可执行SQL
原文链接 疫情期间大家宅在家里是不是已经快憋出“病”了~~ 公司给开了VPN,手机电脑都能连,手机装上APP测试包,就能干活了,所以walking从2020.02.01入京以来,已经窝在家里11天 ...
- 文件类练习题(FileInputStream类)
应用FileInputStream类,编写应用程序,从磁盘上读取一个Java程序,并将源程序代码显示在屏幕上.(被读取的文件路径为:d:/myjava/Hello.java 内容自己决定): pack ...
- java枚举类的常见用法
枚举类型(Enumerated Type) 很早就出现在编程语言中,它被用来将一组类似的值包含到一种类型当中.而这种枚举类型的名称则会被定义成独一无二的类型描述符,在这一点上和常量的定义相似.不过相比 ...
- ubuntu16.04+Pangolin安装
学习视觉Slam十四讲到第三章的可视化演示的时候需要Panglolin的使用,因此在Githup上下载了安装包:https://github.com/stevenlovegrove/Pangolin ...
- C# WinForm 使用SMTP协议发送QQ邮箱验证码
文章来自:https://blog.csdn.net/IT_xiao_guang_guang/article/details/104336604 前言 在程序设计中,发送验证码是常见的一个功能,用 ...
- ASP.NET Core使用环境变量
前言 通常在应用程序开发到正式上线,在这个过程中我们会分为多个阶段,通常会有 开发.测试.以及正式环境等.每个环境的参数配置我们会使用不同的参数,因此呢,在ASP.NET Core中就提供了相关的环境 ...
- java sql语句 like%?%报错的问题
在数据库中不会报错,但用java调用时确保错. SQL语句: SELECT pageId,`name`,text FROM Page WHERE `name` LIKE CONCAT('%',?,'% ...
- sys.stdout.write和print和sys.stdout.flush
1. 先看下官方文档 """ sys.stdout.write(string) Write string to stream. Returns the number of ...