[Luogu] P4626 一道水题 II
---恢复内容开始---
题目描述
一天,szb 在上学的路上遇到了灰太狼。
灰太狼:帮我们做出这道题就放了你。
szb:什么题?
灰太狼:求一个能被 [1,n] 内所有数整除的最小数字,并对 100000007 取模。
szb:这题太水了,就让我小弟来做好了。
然后你就光荣的接受了这个任务。
输入输出格式
输入格式:
一行一个数 n。
输出格式:
一行一个数 ans。
数据范围
n <= 1e8
题目解析
真是凶残,1e8的数据
题目分析难度不大,很容易想到是求1~n的最小公倍数,但要求效率较高。
以1~7举例:
for(int i = ;i <= ;i++) {
分解质因数(i);
ans *= (i的各个质因数 - ans中已有的各个质因数)
}
我用pri[i]表示i的质因数集合,ans[]表示ans是由哪些数相乘得到的。
i = 1时,不管
i = 2时,pri[2] = 2,ans[] = 1,所以ans *= 2
i = 3时,pri[3] = 3,ans[] = 1,2,所以ans *= 3
i = 4时,pri[4] = 2,2,ans[] = 1,2,3,此时ans里有一个i了,要成为4的最小公倍数只需要*2就可以了,ans[] = 1,2,2,3
……
枚举质数,int now = 1;while(质数*now <= n) 质数*now。
Code
#include<iostream>
#include<cstdio>
#include<bitset>
#include<cmath>
using namespace std; const int MAXN = 1e8 + ;
const int MAXM = ;
const int p = ; int n,cnt;
long long ans;
int prime[MAXM];
bool notprime[MAXN]; inline void Prime_Sieve(int n) {
notprime[] = true;
for(register int i = ;i <= n;i++) {
if(notprime[i] == ) prime[++cnt] = i;
for(register int j = ;j <= cnt;j++) {
if(prime[j] * i > n) break;
notprime[prime[j]*i] = true;
if(!(i%prime[j])) break;
}
}
} int main() {
scanf("%d",&n);
Prime_Sieve(n);
long long tmp;
ans = ;
for(register int i = ;i <= cnt;i++) {
tmp = prime[i];
while(tmp*tmp <= n) tmp *= tmp;
while(tmp*prime[i] <= n) tmp *= prime[i];
ans *= tmp % p;
ans %= p;
}
printf("%lld\n",ans%p);
return ;
}
[Luogu] P4626 一道水题 II的更多相关文章
- [ Luogu 4626 ] 一道水题 II
\(\\\) \(Description\) 求一个能被\([1,n]\) 内所有数整除的最小数字,并对 \(100000007\) 取模 \(N\in [1,10^8]\) \(\\\) \(Sol ...
- [洛谷P4626]一道水题 II
题目大意:求$lcm(1,2,3,\cdots,n)\pmod{100000007}$,$n\leqslant10^8$ 题解:先线性筛出质数,然后求每个质数最多出现的次数,可以用$\log_in$来 ...
- NYOJ-525一道水题思路及详解
一道水题 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 今天LZQ在玩一种小游戏,但是这游戏数有一点点的大,他一个人玩的累,想多拉一些人进来帮帮他,你能写一个程序帮帮他 ...
- ny525 一道水题
一道水题时间限制:1000 ms | 内存限制:65535 KB 难度:2描述 今天LZQ在玩一种小游戏,但是这游戏数有一点点的大,他一个人玩的累,想多拉一些人进来帮帮他,你能写一个程序帮帮他吗? ...
- BNU29064——硬币水题II——————【事件概率】
硬币水题II Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld Java class name: ...
- LibreOJ #6165. 一道水题
二次联通门 : LibreOJ #6165. 一道水题 /* LibreOJ #6165. 一道水题 欧拉线性筛 其实题意就是求区间[1, n]所有数的最小公倍数 那么答案就是所有质因子最大幂次的乘积 ...
- 2018焦作网络赛 - Poor God Water 一道水题的教训
本题算是签到题,但由于赛中花费了过多的时间去滴吧格,造成了不必要的浪费以及智商掉线,所以有必要记录一下坑点 题意:方格从1到n,每一格mjl可以选择吃鱼/巧克力/鸡腿,求走到n格时满足 1.每三格不可 ...
- 牛客小白月赛9H论如何出一道水题(两个连续自然数互质)
题面 记录一下...连续得两个自然数互质,这题再特判一下1的情况 #include<bits/stdc++.h> using namespace std; int main() { lon ...
- UPC OJ 一道水题 STL
Problem C: 字符串游戏 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 10 Solved: 3 [Submit][Status][Web ...
随机推荐
- 【OI】线性筛
如何查找一个范围内的所有素数? 可以是从1~n挨个判断n%i 是否 == 0,也可以从 1~sqr(n) 一个个判断. 相信你们也听说过埃氏筛法,是使用每一个数的倍数筛掉合数!但是!每一个合数要被筛多 ...
- LeetCode——Regular Expression Matching
Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...
- spring 的核心接口
spring有两个核心接口,BeanFactory 和ApplicationContext ,其中ApplicationContext 是BeanFactory的子接口.他们代表了Spring容器. ...
- Ubuntu新版中javascript-common.conf害死人啊
自动把javascript目录映射到系统的/usr/share 下面了,删掉对应的软链接再重启就好了
- windows下mongodb设置用户名密码&用python连接
环境: 主机:WIN10 python版本:3.5 mongodb版本:3.4.2 开发环境:pyCharm mongodb设置用户名密码: 编写mongodb配置文件mongodb.confdbpa ...
- jQuery的each内部的break,continue
// break, continue在each等迭代器里都不可用 // return false = break // return true = continue function isClicke ...
- bzoj 3396: [Usaco2009 Jan]Total flow 水流【最大流】
最大流生动形象的板子,注意数组开大点 #include<iostream> #include<cstdio> #include<queue> #include< ...
- object-c中实现特定一个或者多个页面横竖屏,其他界面保持竖屏显示。
1.首先设置项目支持的屏幕方向.info.plist设置(自行设置) 2.写一个子类CusNavigationController 继承 UINavigationController,在CusNavi ...
- mysql5.7 1055
错误提示: [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggreg ...
- 暴力/思维 HDOJ 5386 Cover
题目传送门 /* 题意:给出刷墙的所有的方法,求一种顺序,使得原矩阵刷成目标矩阵 暴力:(题解)我们只要每次找一行或一列颜色除了0都相同的,然后如果有对应的操作,就把这行这列都赋值成0即可 */ /* ...