1654 方程的解 - Wikioi

题目描述 Description
佳佳碰到了一个难题,请你来帮忙解决。对于不定方程a1+a2+… +ak-1 +ak=g(x),其中k≥2且k ∈
N*,x是正整数,g(x) =xx mod 1000(即xx除以1000的余数),x,k是给定的数。我们要求的是这个不定方程的正整数解组数。举例来说,当k=3,
x=2时,分别为(a1,a2,a3)=(2,1,1),(1,2,1),(1,1,2)。
输入描述 Input
Description
输人只有一行,为用空格隔开的两个正整数,依次为k,x。
输出描述 Output
Description
输出只有一行,为方程的正整数解组数。
样例输入 Sample Input
3 2
样例输出 Sample
Output
3
数据范围及提示 Data Size & Hint
【数据范围】
对于40%的数据,ans ≤
1016;
对于100%的数据,k≤ 100,x≤231一1,k ≤g (x)。

傻逼dp题,只是要高精度(因为内存,我高精度压了十多位)

 1 const
2 maxn=1010;
3 h=100000000000000000;
4 type
5 big=array[0..10]of int64;
6 var
7 f,s:array[0..maxn,0..maxn]of big;
8 n,k:int64;
9
10 function q(x,y:int64):int64;
11 begin
12 if y=0 then exit(1);
13 q:=q(x,y>>1);
14 q:=q*q mod 1000;
15 if y and 1=1 then q:=q*x mod 1000;
16 end;
17
18 operator +(a,b:big)c:big;
19 var
20 i:longint;
21 begin
22 c:=a;
23 for i:=1 to b[0] do
24 inc(c[i],b[i]);
25 if c[0]<b[0] then c[0]:=b[0];
26 for i:=1 to c[0]-1 do
27 begin
28 inc(c[i+1],c[i]div h);
29 c[i]:=c[i]mod h;
30 end;
31 i:=c[0];
32 while c[i]>=h do
33 begin
34 c[i+1]:=c[i]div h;
35 c[i]:=c[i]mod h;
36 inc(c[0]);
37 end;
38 end;
39
40 procedure print(a:big);
41 var
42 i:longint;
43 k:int64;
44 begin
45 write(a[a[0]]);
46 for i:=a[0]-1 downto 1 do
47 begin
48 k:=h;
49 while k>10 do
50 begin
51 k:=k div 10;
52 if a[i]<k then write(0);
53 end;
54 write(a[i]);
55 end;
56 end;
57
58 procedure main;
59 var
60 i,j:longint;
61 begin
62 read(n,k);
63 k:=q(k,k);
64 for i:=0 to k do
65 begin
66 s[0,i][0]:=1;
67 s[0,i][1]:=1;
68 end;
69 for i:=1 to n do
70 begin
71 for j:=k downto i do
72 f[i,j]:=s[i-1,j-1];
73 for j:=i to k do
74 s[i,j]:=f[i,j]+s[i,j-1];
75 end;
76 print(f[n,k]);
77 end;
78
79 begin
80 main;
81 end.

时间: 2024-11-16 23:27:14

1654 方程的解 - Wikioi的相关文章

用c语言求ax^2+bx+c=0方程的解

用c语言求ax^2+bx+c=0方程的解.#include <stdio.h>#include <math.h>#define m 0.000001int main(){     float a,b,c,x,x2,n,q,p;     scanf ("%f%f%f",&a,&b,&c);     n=b*b-4*a*c;     if ((a<m)&&(a>-m))     {         x=(-c)/b

codevs3732==洛谷 解方程P2312 解方程

P2312 解方程 195通过 1.6K提交 题目提供者该用户不存在 标签数论(数学相关)高精2014NOIp提高组 难度提高+/省选- 提交该题 讨论 题解 记录 题目描述 已知多项式方程: a0+a1x+a2x^2+..+anx^n=0 求这个方程在[1, m ] 内的整数解(n 和m 均为正整数) 输入输出格式 输入格式: 输入文件名为equation .in. 输入共n + 2 行. 第一行包含2 个整数n .m ,每两个整数之间用一个空格隔开. 接下来的n+1 行每行包含一个整数,依次

9.10 第一题 方程的解 题解

这道题当时感觉是一道几乎纯考扩展欧几里得的题,然而板子忘了--于是乎这道题被我放在第二个打. 不得不说出题人相当良心,给了大把的暴力分前20分就是c-1,20~40暴力枚举,40~60输出1.白送的60分就到手了. 然而难得是后40分,我们可以先通过扩展欧几里得先求出x最小整数解,然后首先,自己本身就无解的方程输出0就好了,其次,如果a,b中有一个为零那么就是无限解如果都为0就看c,如果异号就是无限解等等等等特判,然后就没什么了,注意要开long long,细节真心坑,而且特判的顺序也极其重要.

欧几里德扩展方程 详解

作用: 欧几里德扩展方程是用来求解二元一次线性方程的.ax+by=c (a.b.c为已知数) 对于给定方程: ax+by=c,令g=gcd(a,b) 因为a是g的倍数,b也是g的倍数,所以令a=m*g , b=n*g,则: ax+by=g(m*x+n*y)=c 所得的结果c必然是g的倍数. 当且仅当mx+ny=1时,右边有最小值.而此时mn必定是互质的. 所以我们经常求的最小整数解就是求方程ax+by=gcd(a,b)的解. 解方程步骤: 对于方程 ax+by=gcd(a,b) 由欧几里德算法

方程有解习题

\(\fbox{例1}\)(2017?蚌埠模拟) 已知函数\(f(x)=lnx-x^3\)与\(g(x)=x^3-ax\)的图像上存在关于\(x\)轴的对称点,则\(a\)的取值范围为[ ] A.\((-\infty,e)\) \(\hspace{2cm}\) B.\((-\infty,e]\) \(\hspace{2cm}\) C. \((-\infty,-\cfrac{1}{e})\) \(\hspace{2cm}\) D. \((-\infty,-\cfrac{1}{e}]\) 分析:函数

C++ 二分法求解方程的解

二分法是一种求解方程近似根的方法.对于一个函数 f(x)f(x),使用二分法求 f(x)f(x) 近似解的时候,我们先设定一个迭代区间(在这个题目上,我们之后给出了的两个初值决定的区间 [-20,20][?20,20]),区间两端自变量 xx 的值对应的 f(x)f(x) 值是异号的,之后我们会计算出两端 xx 的中点位置 x'x′ 所对应的 f(x')f(x′) ,然后更新我们的迭代区间,确保对应的迭代区间的两端 xx 的值对应的 f(x)f(x) 值还会是异号的. 重复这个过程直到我们某一次

方程的解题解和扩欧的一些总结

题目描述 给出一个二元一次方程ax+by=c,其中x.y是未知数,求它的正整数解的数量. 输入输出格式 输入格式: 第一行一个整数T,表示有T组数据.接下来T行,每行3个整数a.b.c. 输出格式: 输出T行,每行一个数,表示方程解的数量.如果正整数解的数量比65535还多输出"ZenMeZheMeDuo". 题解 这个题一看就要先用扩展欧几里得求出一组x最小的整数解然后再计算出所有的解. 代码 1 #include<bits/stdc++.h> 2 using names

方程的解(exgcd模板)

题面在考试反思中. 题解: 这题其实只是个板子题,但考试时忘记了,又不会推导,于是凉凉... 借这道题回顾一下$ exgcd $的各种特判: 我习惯将方程$ ax+by=c $看成一次函数$ y=-\frac{a}{b}x+\frac{c}{b} $ 而在此之前我们要特判b是否为0,再根据一次函数的性质来判断. $ a,b,c $都为0时,无数组解. $ a,b $为0且$ c $不为0时,无解 $ b=0 $时,若$ a*c<0 $,无正整数解. 若$ c\%a=0 $,无数组解. $b$不为

7-54 求方程的解 (10 分)

求ax2+bx+c=0方程的实根.a,b,c由键盘输入. 解方程要考虑系数a等于零的情况.a等于零有两种情况(b==0,b!=0),a不等于零有三种情况(delta>0.==0.<0),先计算得到根x1.x2,再输出 输入格式: 输入三个数a,b,c. 输出格式: 输出方程的实根(保留两位小数),如果方程有1个实根,则输出根:如果方程有2个不等实根,则一起输出(使用空格分开),先输出较大根,后输出较小根. 其余情况(如无实根等)则输出No. 输入样例: 1 -3 2 输出样例: 2.00 1.