9.16 第四题 数论 欧拉筛+唯一分解定理
来源:互联网 发布:网络盒子加密软件 编辑:程序博客网 时间:2024/06/05 17:47
题目大意:
输入n;
从1到n找一些数乘起来,使得答案是一个完全平方数,并尽量使这个数大,答案模100000007;
样例:
输入
7
输出
144
Q
思路:
1.将所有合数分解为素数;
2.统计所有分解后 每个素数的个数;
3.个数为奇数 ,个数减一跑快速幂,偶数直接跑;
统计素数个数
n=8;1~8中
2的个数:
2:1个
4:2个
6:1个
8:3个
2的个数=8/2+8/4+8/8=7;
及n/2^1+n/2^2+……+n/2^k=num;
机智……
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;typedef long long ll;const ll MAXN=6000001,mod=100000007;ll is_prime[MAXN],cnt,n,num[MAXN];bool not_prime[MAXN];void euler(){ not_prime[1]=true; for(ll i=2;i<=n;i++) { if(!not_prime[i]) is_prime[++cnt]=i; for(ll j=1;j<=cnt && is_prime[j]*i<=0;j++) { not_prime[is_prime[j]*i]=true; if(i % is_prime[j]==0) break; } } return;}ll ksm(ll a,ll b){ ll ans=1; while(b) { if(b & 1) ans=(ans*a)%mod; a=(a*a)%mod; b>>=1; } return ans%mod;}void solve(){ cin>>n; euler(); for(ll i=1;i<=cnt;i++) { ll s=n; while(s) { num[i]+=s/is_prime[i]; s/=is_prime[i]; } } ll an=1; for(ll i=1;i<=cnt;i++) { if(num[i]%2) an=(an*ksm(is_prime[i],num[i]-1)%mod)%mod; else an=(an*ksm(is_prime[i],num[i])%mod)%mod; } cout<<an;}int main(){ solve(); return 0;}
阅读全文
1 0
- 9.16 第四题 数论 欧拉筛+唯一分解定理
- 数论-唯一分解定理
- [数论]唯一分解定理
- 唯一分解定理(数论)
- Sumdiv--数论+快速幂取模+唯一分解定理+欧拉筛
- uva 10375 唯一分解定理 筛法求素数【数论】
- HDU 2608 - 0 or 1 (数论 + 唯一分解定理)
- 欧几里得算法和唯一分解定理(数论)
- Uva10375 Choose and divide(数论、唯一分解定理、快速幂)
- Uva10791 Minimum Sum LCM(数论、唯一分解定理)
- 数论:整数的唯一分解定理及其应用小结
- 欧几里得算法和唯一分解定理(数论)
- 唯一分解定理
- 唯一分解定理
- 唯一分解定理
- 唯一分解定理
- 唯一分解定理
- 唯一分解定理
- matlab set函数
- 第二周项目0-“输出一段话”
- 使用Junit做参数化测试
- Python的继承方法
- 统计学简介之九——两个总体参数的区间估计
- 9.16 第四题 数论 欧拉筛+唯一分解定理
- 小米笔试题第1题
- am335x 内核源码分析2 LCD移植
- hihoCoder1331—扩展二进制数
- 异步加载数据,无限轮播,
- 20. Valid Parentheses
- caffe:把pb格式的文件均值(mean.binaryproto)转换成numpy格式的文件均值(mean.npy)
- poj 3177 Redundant Paths(Tarjan,边双连通分量)
- 机器学习-1-.py文件的导入问题