Always an integer UVALive - 4119
题目很简单,就是求表达式(P/D)的结果是不是整数。其中P是一个整系数的多项式,D是一个正整数。
把1-k(最高次)+1都试一次就好了。结论可以总结归纳得到。(k取 0, 1, 2 .... 的情况推一次,可以推出结论)。
// Asimple #include <iostream> #include <algorithm> #include <cstdio> #include <cstdlib> #include <queue> #include <vector> #include <string> #include <cstring> #include <stack> #include <set> #include <map> #include <cmath> #define INF 0x3f3f3f3f #define mod 1000007 #define debug(a) cout<<#a<<" = "<<a<<endl #define test() cout<<"============"<<endl using namespace std; typedef long long ll; typedef unsigned long long ull; const int maxn = 500+5; ll n, m, T, len, cnt, num, ans, Max, k; string str; pair<ll, ll> p[maxn]; ll qpow(ll a, ll b, ll md) { ll ans = 1; while( b ) { if( b&1 ) ans = (ans*a)%md; a = (a*a)%md; b >>= 1; } return ans; } void solve(int k) { cnt = 0; for(int i=1; str[i]!=')'; ) { ll first = 0; ll second = 0; bool fg = false; while( str[i]!='n' && str[i]!=')' ) { char ch = str[i]; //debug(ch); if( ch== '+') { } else if( ch == '-' ) { fg = true; } else first = first*10 + (ch-'0'); i ++; } if( first == 0 ) first = 1; if( fg ) first *= -1; //debug(first); i ++; //printf("i==%d ch==%c\n", i, str[i]); if( str[i]=='/' ) { second = 0; p[len++] = make_pair(first, second); break; } else if( str[i]!='^' ) { second = 1; } else if( str[i]=='^' ) { i ++; while( isdigit(str[i]) ) { second = second*10+(str[i]-'0'); i ++; } } //debug(second); p[len++] = make_pair(first, second); cnt = max(cnt, second); //debug(cnt); //debug(len); } m = 0; for(int i=0; i<k; i++) { if( str[i]=='/' ) { i ++; while( isdigit(str[i]) && i<k ) { m = m*10 + (str[i]-'0' ); i ++; } } } } void input(){ int cas = 1; while( cin >> str ) { if( str[0] == '.' ) break; len = 0; k = str.length(); solve(k); bool f = true; for(int i=1; i<=cnt+1; i++) { ll sum = 0; for(int j=0; j<len; j++) { //printf("first==%d second==%d\n", p[j].first, p[j].second); sum += (p[j].first*qpow(i, p[j].second, m))%m; sum %= m; } if( sum ) { f = false; break; } } cout << "Case " << cas++ << ": "; if( f ) cout << "Always an integer" << endl; else cout << "Not always an integer" << endl; } } int main() { input(); return 0; }
低调做人,高调做事。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理