hdu 4447 Yuanfang, What Do You Think?
思路:
这题有个结论也可以自己归纳:
对于给定的n,其约数用pi表示
T(n)=T(p1)T(p2)……T(pn)T(n')
其中T(n')是这个式子所独有的也就是
T(n')=(x^n-1)/T(p1)/T(p2)……/T(pn)
代码如下:
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<cstring>
#define MAX 1102
using namespace std;
struct pol
{
int bit[MAX],len;
void init(){memset(bit,,sizeof(bit));len=;}
}p[MAX];
int ans[MAX];
int com(pol a,pol b)
{
if(a.len!=b.len)return a.len-b.len;
for(int i=a.len-;i>=;i--)
if(a.bit[i]!=b.bit[i]){
if(abs(a.bit[i])!=abs(b.bit[i]))
return abs(a.bit[i])-abs(b.bit[i]);
return a.bit[i]-b.bit[i];
}
return ;
}
bool cmp(int a,int b)
{
return com(p[a],p[b])<;
}
void shows(int n)
{
if(n>) printf("x^%d",n);
else if(n==) printf("x");
}
void show(pol a)
{
int x;
printf("(");
for(int i=a.len-;i>=;i--){
if(a.bit[i]==) continue;
if(i==){
if(a.bit[i]>) printf("+%d",a.bit[i]);
else printf("%d",a.bit[i]);
continue;
}
if(i==a.len-){
if(a.bit[i]<) printf("-");
x=abs(a.bit[i]);
if(x>) printf("%d",x);
shows(i);
continue;
}
if(a.bit[i]<) printf("-");
else printf("+");
x=abs(a.bit[i]);
if(x>) printf("%d",x);
shows(i);
}
printf(")");
}
pol Div(pol a,pol b)
{
pol c;
c.init();
for(int i=a.len-;i>=;i--)
if(a.bit[i]){
c.bit[i-b.len+]=a.bit[i];
int cnt=,cur=a.bit[i];
for(int j=b.len-;j>=;j--){
a.bit[i-cnt]-=cur*b.bit[j];
cnt++;
}
}
c.len=a.len;
while(c.len>&&c.bit[c.len-]==) c.len--;
return c;
}
int main(){
p[].bit[]=-;
p[].bit[]=;
p[].len=;
for(int i=;i<MAX;i++){
p[i].init();
p[i].bit[i]=;p[i].bit[]=-;
p[i].len=i+;
p[i]=Div(p[i],p[]);
for(int j=;j*j<=i;j++){
if(i%j==){
p[i]=Div(p[i],p[j]);
if(j*j!=i) p[i]=Div(p[i],p[i/j]);
}
}
}
int n,m;
while(scanf("%d",&n)&&n){
if(n==){
puts("x-1");
continue;
}
m=;
for(int i=;i*i<=n;i++){
if(n%i==){
ans[m++]=i;
if(i*i!=n) ans[m++]=n/i;
}
}
sort(ans,ans+m,cmp);
for(int i=;i<m;i++)
show(p[ans[i]]);
printf("\n");
}
return ;
}
hdu 4447 Yuanfang, What Do You Think?的更多相关文章
- HDU P4578 Transformation
Problem Description Yuanfang is puzzled with the question below: There are n integers, a1, a2, …, an ...
- hdu 4578 线段树(标记处理)
Transformation Time Limit: 15000/8000 MS (Java/Others) Memory Limit: 65535/65536 K (Java/Others) ...
- HDU 4578 - Transformation - [加强版线段树]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4578 Problem Description Yuanfang is puzzled with the ...
- HDU 4578 线段树玄学算法?
Transformation 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4578 Problem Description Yuanfang is p ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
- hdu 4859 海岸线 Bestcoder Round 1
http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...
- HDU 4569 Special equations(取模)
Special equations Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- HDU 4006The kth great number(K大数 +小顶堆)
The kth great number Time Limit:1000MS Memory Limit:65768KB 64bit IO Format:%I64d & %I64 ...
随机推荐
- Low-poly低面建模(低像素多边形)
概念 继拟物化.扁平化(Flat Design).长阴影(Long Shadow)之后,低多边形(Low Poly)又火速掀起了最新设计风潮.这种设计风格在早期计算机建模和动效中就被广泛采用,在快要被 ...
- .NET4.5可以给所有线程设置默认的Culture了
How to set CurrentCulture for all threads in a domain in .NET 4.5 Before .NET 4.5 if we wanted to se ...
- daxuez.com
大学z,一个还没想好的名字和项目 初期定位:服务于武汉各大高校的大学学生群体 服务项目:兼职.旅游.培训.租车.班服订做.票务
- 【风马一族_Java】使用java,画出任意大小的菱形
public class rhombic { public static void main(String[] args){ /** * scriber()画菱形的方法,参数 9 是指菱形的对角线的长 ...
- 5.servlet cookie自动登录的实例
1.要建的文档,.java用servlet创建 2.建一张登陆表格 index.jsp <%@ page language="java" import="java. ...
- 数字图象处理MATLAB学习
diagram = imread('C:\Users\Administrator\Desktop\Compressed\fiter\lena256.jpg') %diagram = rgb2gray( ...
- 8款实用的Jquery瀑布流插件
1.网友Null分享Jquery响应式瀑布流布局插件 首先非常感谢网友Null的无私分享,此作品是一款响应式瀑布流布局Jquery插件,网友Null增加了一个屏幕自适应和响应式,响应式就是支持智能手机 ...
- CentOS设置服务开机启动的方法
CentOS设置服务开机启动的两种方法 1.利用 chkconfig 来配置启动级别在CentOS或者RedHat其他系统下,如果是后面安装的服务,如httpd.mysqld.postfix等,安装后 ...
- Spannable相关方法
实现文本链接 其中tv是TextView类型的控件.只需写java代码即可实现链接,无需在xml文件中进行其他的设置. SpannableString spanTxt = new SpannableS ...
- jQuery取值相加
实在是太菜了. 这样一个需求: 计算两个text中的值的和,引发了对jQuery中类型转换的知识软肋. 在网上找到了才知道:http://zhidao.baidu.com/link?url=ujw88 ...