数学上来先打表
来源:互联网 发布:川农在线网络教育平台 编辑:程序博客网 时间:2024/06/05 20:29
数学上来先打表
Time Limit: 1000 Memory Limit: 65536
Description
给定一个函数 ldq(x) = i^(i*i/7),现在 PBH 想知道区间 [l, r] 之间所有素数的 ldq(i) 的和,即 ldq(l) + ldq(l+1) + … + ldq(r-1) + ldq(r)。
其中 i*i/7 中的除法为整数除法。
[l, r] 区间内加和,仅当 i 为素数时才累加 ldq(i)。
Input
输入两个整数 l, r (1 <= l <= r <= 10000)。
Output
输出一个整数,表示答案,最终结果对 7 取模。
Sample Input
1 3
Sample Output
4
以下为TLE代码,就是很正常的写法(这样写百分百超时,当时不会高效算法)
```#include <bits/stdc++.h>using namespace std;int is_prime[10005],prime[10005];void sieve()//筛法{ int i,j; memset(is_prime,0,sizeof(is_prime)); is_prime[1]=is_prime[0]=1; int p=0; for(i=2; i<=10005; i++) { if(!is_prime[i]) prime[p++]=i; for(j=i*2; j<=10005; j+=i) { is_prime[j]=1; } }}int f(int i){ int x=i*i/7; int sum=1; while(x) { sum*=i; sum%=7; x--; } return sum;}int main(){ sieve(); int n,m; while(~scanf("%d %d",&n,&m)) { int sum=0; for(int i=n;i<=m;i++) { if(!is_prime[i]) { sum+=f(i); sum%=7; } } printf("%d\n",sum); }}
以下为AC代码
#include <bits/stdc++.h>using namespace std;int is_prime[10005],prime[10005];void sieve(){ int i,j; memset(is_prime,0,sizeof(is_prime)); is_prime[1]=is_prime[0]=1; for(i=2; i<=10005; i++) { if(!is_prime[i]) for(j=i*2; j<=10005; j+=i) { is_prime[j]=1; } }}long long int f(long long a,long long b)//quick幂{ long long sum=1; a%=7; while(b) { if(b&1) sum*=(a%7); b>>=1; a*=(a%7); } return sum;}int main(){ sieve(); int n,m; while(~scanf("%d %d",&n,&m)) { int sum=0; for(int i=n;i<=m;i++) { if(!is_prime[i]) { sum+=f(i,i*i/7); sum%=7; } } printf("%d\n",sum); }}
阅读全文
0 0
- 数学上来先打表
- [分块+并查集按秩合并]#519. 「LibreOJ β Round #2」数学上来先打表
- 新上来
- 上来晒一晒。。。。
- 上来瞧瞧
- 很久没有上来了,上来踩一下
- 新手上来了!
- 上来看看!好慢啊!
- 扔个进制转换器上来
- 终于登陆上来了!
- 头一次上来
- 好久都登不上来啊
- 终于连上来了!!!!
- 也上来玩一下
- 上来看一眼风景
- 还是传上来了``
- 贴点东西上来
- 第一次上来弄BOKE
- 原码、反码、补码、和位非的关系
- Flask的url_for函数
- QT 过滤文件夹下指定文件
- 线程与进程区别原理分析java编程思想
- MyEclipse 快捷键
- 数学上来先打表
- 有道翻译API 海词API
- 草料二维码
- Node.js包管理器Yarn的入门介绍与安装
- 【Linux】source insight 4 安装说明
- [hdu-1814] Peaceful Commission题解
- Python高级主题:MetaClass 元类
- bat脚本
- 上传本地项目到GitHub