1069 - Always an integer


题意:给定一个多项式,推断是否总是整数

思路:LRJ大白上的例题,上面给出了证明,仅仅要1到k + 1(k为最高次数)带入方程都是整数,那么整个方程就是整数,处理出字符串后,然后过程用高速幂计算,推断最后答案是否为0,看是否全都满足是整数。

代码:
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std; char str[105]; struct X {
long long a, k;
} x[105]; long long mu, Max;
int xn; void build() {
mu = Max = 0; xn = 0;
long long s = 0, a = 0, flag = 1, k = 0;
int len = strlen(str);
for (int i = 0; i < len; i++) {
if (str[i] >= '0' && str[i] <= '9') {
if (s == 0) a = a * 10 + str[i] - '0';
if (s == 1) k = k * 10 + str[i] - '0';
if (s == 2) mu = mu * 10 + str[i] - '0';
}
else if (str[i] == 'n')
s = 1;
else if (str[i] == '/')
s = 2;
else if (str[i] == '+' || str[i] == '-' || str[i] == ')') {
if (s >= 1) {
if (a == 0) a = 1;
if (k == 0) k = 1;
}
Max = max(Max, k);
x[xn].a = a * flag; x[xn].k = k; xn++;
if (str[i] == '-') flag = -1;
else if (str[i] == '+') flag = 1;
a = k = s = 0;
}
}
} long long pow_mod(long long x, long long k) {
long long ans = 1;
while (k) {
if (k&1) ans = ans * x % mu;
x = x * x % mu;
k >>= 1;
}
return ans;
} bool judge() {
for (long long i = 0; i <= Max + 1; i++) {
long long ans = 0;
for (int j = 0; j < xn; j++) {
ans = (ans + x[j].a * pow_mod(i, x[j].k)) % mu;
}
if (ans) return false;
}
return true;
} int main() {
int cas = 0;
while (~scanf("%s", str) && str[0] != '.') {
build();
printf("Case %d: %s\n", ++cas, judge()?"Always an integer":"Not always an integer");
}
return 0;
}

最新文章

  1. Poco::JSON::Array 中object 设置preserveInsertionOrder 时,stringify出错--&gt;深入解析
  2. Beta阶段第四次Scrum Meeting
  3. PHP安全编程:主机文件目录浏览(转)
  4. 《转》OpenStack Live Migration
  5. RESTful API 设计
  6. java 的三种代理
  7. HTML5学习笔记(五):CSS基础
  8. CDH 问题
  9. c++ 查找容器中符合条件的元素,并返回iterator(find_if)
  10. python 逐行读取文本
  11. pytest文档16-用例a失败,跳过测试用例b和c并标记失败xfail
  12. 【剑指offer12】矩阵中的路径(回朔法),C++实现
  13. Spring Boot应用中的异常处理
  14. 【动态规划】Codeforces Round #417 (Div. 2) B. Sagheer, the Hausmeister
  15. 手把手教你使用FineUI开发一个b/s结构的取送货管理信息系统系列博文索引
  16. bzoj 3172: [Tjoi2013]单词 fail树
  17. 《C#高效编程》读书笔记05-为类型提供ToString()方法
  18. c++ 将输入存储到数组,然后反转数组,最后输出
  19. PAT Basic 1065
  20. keil mdk uvision使用技巧

热门文章

  1. Embedded之Introduction
  2. AC多模式匹配算法
  3. PHPCURL直接访问JSONRPC服务
  4. [ZZ] C++ pair
  5. css 样式大全
  6. 轻松学习Linux之AWK使用初步
  7. VMWare高可用集群在企业的应用
  8. Hadoop构成
  9. Xtrabackup之innobackupex备份恢复详解(转)
  10. [转]模拟HttpContext 实现ASP.NET MVC 的单元测试