virtual hust 2013.6.21 NEFU 挑战编程----数论 D - Factovisors
题目:Factovisors
思路:直接质因式分解除数,然后求得阶乘各质因子的幂是否大于除数的,注意特判情况(存在一个较大的素数,这个要判断n是不是大于等于那个很大的素数)

#include <cstdio> #include <iostream> #include <cstring> #include <cmath> #include <algorithm> using namespace std; #define maxn 60000 bool vis[maxn]; int prime[maxn]; int cnt[maxn]; int n_prime=0; void Prime() { memset(vis,true,sizeof(vis)); vis[0]=vis[1]=0; for(int i=2;i<maxn;i++) { if(vis[i]) { prime[++n_prime]=i; for(int j=2*i;j<maxn;j+=i) vis[j]=0; } } //cout<<n_prime<<":"<<prime[n_prime]<<endl; } int get(int n,int factor) { int ans=0; int tmp=factor; while(tmp<=n) { ans+=n/tmp; tmp*=factor; } return ans; } bool is_ok(int n,int num) { memset(cnt,0,sizeof(cnt)); for(int i=1;i<=n_prime;i++) { while(num%prime[i]==0) { num/=prime[i]; cnt[i]++; } } cnt[0]=num; if(n<cnt[0]&&cnt[0]>1) return false; for(int i=1;i<=n_prime;i++) { if(cnt[i]) { if(get(n,prime[i])<cnt[i]) return false; } } return true; } int main() { int n,num; Prime(); while(scanf("%d%d",&n,&num)!=EOF) { if(is_ok(n,num)) printf("%d divides %d!\n",num,n); else printf("%d does not divide %d!\n",num,n); } return 0; }
· 电商平台中订单未支付过期如何实现自动关单?
· 用 .NET NativeAOT 构建完全 distroless 的静态链接应用
· 为什么构造函数需要尽可能的简单
· 探秘 MySQL 索引底层原理,解锁数据库优化的关键密码(下)
· 大模型 Token 究竟是啥:图解大模型Token
· 如何开发 MCP 服务?保姆级教程!
· 1.net core 工作流WorkFlow流程(介绍)
· 瞧瞧别人家的限流,那叫一个优雅!
· C# 工业视觉开发必刷20道 Halcon 面试题
· 从零散笔记到结构化知识库:我的文档网站建设之路