[UVA1434] YAPTCHA(数论,威尔逊定理)

题目链接:http://acm.hust.edu.cn/vjudge/problem/36250

题意:求那个式子。

设3k+7=x,则化简成 Sn=Σ(k=1~n) (((x-1)!+1/x)-[(x-1)!/x])

根据威尔逊定理,假如一个数p是素数,则这个数满足:(p-1)!=-1 (mod p)即 (p-1)!-1=0(mod p)。

由于被减数满足此条件,而减数表示向下取整。则被减数整除,减数一定是向下取整的。所以结果减数比被减数要小1,否则减数和被减数相等,即为0。问题转换成了求3k+7是否是素数,打表即可。

  1 /*
  2 ━━━━━┒ギリギリ♂ eye!
  3 ┓┏┓┏┓┃キリキリ♂ mind!
  4 ┛┗┛┗┛┃\○/
  5 ┓┏┓┏┓┃ /
  6 ┛┗┛┗┛┃ノ)
  7 ┓┏┓┏┓┃
  8 ┛┗┛┗┛┃
  9 ┓┏┓┏┓┃
 10 ┛┗┛┗┛┃
 11 ┓┏┓┏┓┃
 12 ┛┗┛┗┛┃
 13 ┓┏┓┏┓┃
 14 ┃┃┃┃┃┃
 15 ┻┻┻┻┻┻
 16 */
 17 #include <algorithm>
 18 #include <iostream>
 19 #include <iomanip>
 20 #include <cstring>
 21 #include <climits>
 22 #include <complex>
 23 #include <fstream>
 24 #include <cassert>
 25 #include <cstdio>
 26 #include <bitset>
 27 #include <vector>
 28 #include <deque>
 29 #include <queue>
 30 #include <stack>
 31 #include <ctime>
 32 #include <set>
 33 #include <map>
 34 #include <cmath>
 35 using namespace std;
 36 #define fr first
 37 #define sc second
 38 #define cl clear
 39 #define BUG puts("here!!!")
 40 #define W(a) while(a--)
 41 #define pb(a) push_back(a)
 42 #define Rint(a) scanf("%d", &(a))
 43 #define Rll(a) scanf("%lld", &a)
 44 #define Rs(a) scanf("%s", a)
 45 #define Cin(a) cin >> a
 46 #define FRead() freopen("in", "r", stdin)
 47 #define FWrite() freopen("out", "w", stdout)
 48 #define Rep(i, len) for(int i = 0; i < (len); i++)
 49 #define For(i, a, len) for(int i = (a); i < (len); i++)
 50 #define Cls(a) memset((a), 0, sizeof(a))
 51 #define Clr(a, x) memset((a), (x), sizeof(a))
 52 #define Full(a) memset((a), 0x7f, sizeof(a))
 53 #define lrt rt << 1
 54 #define rrt rt << 1 | 1
 55 #define pi 3.14159265359
 56 #define RT return
 57 #define lowbit(x) x & (-x)
 58 #define onenum(x) __builtin_popcount(x)
 59 typedef long long LL;
 60 typedef long double LD;
 61 typedef unsigned long long Uint;
 62 typedef pair<int, int> pii;
 63 typedef pair<LL, LL> pLL;
 64 typedef pair<string, LL> psi;
 65 typedef map<string, LL> msi;
 66 typedef vector<LL> vi;
 67 typedef vector<LL> vl;
 68 typedef vector<vl> vvl;
 69 typedef vector<bool> vb;
 70
 71 const int maxn = 6000100;
 72 bool isprime[maxn];
 73 int n;
 74 int dp[maxn/6];
 75
 76 void init() {
 77     int nn = int(sqrt(maxn));
 78     memset(isprime, true, sizeof(isprime));
 79     isprime[0] = isprime[1] = 0;
 80     for(int i = 2; i <= nn; i++) {
 81         if(isprime[i]) {
 82             int p = maxn / i;
 83             for(int j = 2; j <= p; j++) {
 84                 isprime[j*i] = 0;
 85             }
 86         }
 87     }
 88 }
 89
 90 int main() {
 91     // FRead();
 92     init();
 93     Cls(dp); dp[1] = 0;
 94     For(i, 2, 1000010) {
 95         dp[i] = dp[i-1];
 96         if(isprime[3*i+7]) dp[i]++;
 97     }
 98     int T;
 99     Rint(T);
100     W(T) {
101         Rint(n);
102         cout << dp[n] << endl;
103     }
104     RT 0;
105 }
时间: 2024-10-12 13:21:16

[UVA1434] YAPTCHA(数论,威尔逊定理)的相关文章

数论&#183;威尔逊定理

威尔逊定理: $(p-1)!\equiv -1(\mod p)$当且仅当$p$为素数. 证明:在模p(素数)的简化剩余系$S = \{1, 2, ..., p - 1\}$中,对任意$i\in S$, $\exists j$, $ s.t.$,  $ij \equiv 1(\mod p)$, 考虑这种性质具有对称性,若${i^2}\equiv1(\mod p)$,则$i\equiv{\pm1}({\mod p})$,因此$(p-1)!\mod p = 1(p-1)\mod p = -1$.

UVA - 1434 YAPTCHA (威尔逊定理)

Description The math department has been having problems lately. Due to immense amount of unsolicited automated programs which were crawling across their pages, they decided to put Yet-Another-PublicTuring-Test-to-Tell-Computers-and-Humans-Apart on t

hdu2973 YAPTCHA【威尔逊定理】

<题目链接> 题目大意: The task that is presented to anyone visiting the start page of the math department is as follows: given a natural n, compute  where [x] denotes the largest integer not greater than x. 给出 t 和n,t代表样例组数,根据给出的n算出上面表达式.(注意:[x]表示,不超过x的最大整数)

数论 (大数,小费马定理,欧拉定理,威尔逊定理,快速数论变换(NNT)模版)

1 Java大数 2 import java.util.*; 3 import java.math.*; 4 public class Main{ 5 public static void main(String args[]){ 6 Scanner cin = new Scanner(System.in); 7 BigInteger a, b; 8 9 //以文件EOF结束 10 while (cin.hasNext()){ 11 a = cin.nextBigInteger(); 12 b

UVA 1434 - YAPTCHA(数论)

UVA 1434 - YAPTCHA 题目链接 题意:求出题目中那个公式的答案 思路: 当3?k+7非素数的时候,那么(3?k+6)!(由于必定能找到两个因子相乘) 所以原式为0 当3?k+7为素数的时候,依据威尔逊定理,((3?k+6)!+1)%(3?k+7)==0,因此原式能够转化为[x - (x - 1)] = 1 因此问题转化为仅仅要推断3 * k + 7是不是素数,那么就非常好办了,预处理出素数表,再预处理出答案就可以 代码: #include <stdio.h> #include

hdu5391威尔逊定理

威尔逊定理 在初等数论中,威尔逊定理给出了判定一个自然数是否为素数的充分必要条件.即:当且仅当p为素数时:( p -1 )! ≡ -1 ( mod p ),但是由于阶乘是呈爆炸增长的,其结论对于实际操作意义不大. hdu5391用到了这一数论定理. Zball in Tina Town Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s):

数论四大定理

威尔逊定理.欧拉定理.孙子定理.费马小定理并称数论四大定理. 威尔逊定理 若p为质数,则p可整除(p-1)!+1. 欧拉定理 欧拉定理,也称费马-欧拉定理. 若n,a为正整数,且n,a互素,即gcd(a,n) = 1,则 a^φ(n) ≡ 1 (mod n) 孙子定理 孙子定理,又称中国剩余定理. 公元前后的<孙子算经>中有“物不知数”问题:“今有物不知其数,三三数之余二 ,五五数之余三 ,七七数之余二,问物几何?”答为“23”. 明朝程大位用歌谣给出了该题的解法:“三人同行七十稀,五树梅花廿

【数论四大定理】

威尔逊定理.欧拉定理.孙子定理.费马小定理并称数论四大定理. [威尔逊定理] 当且仅当p为素数时:( p-1 )! ≡ -1(mod p): 即:如果p为合数,( p-1 )! mod p 答案为0:如果p为素数,那么由威尔逊定理可得( p-1 )! mod p的答案为n−1; [欧拉定理(费马-欧拉定理)] 若n, a为正整数,且n, a互质,则:aφ(n) ≡ 1 (mod n) 欧拉函数φ(n) 表示与 n互素且不超过n的正整数的个数: [费马小定理(Fermat Theory)] 若a是

数论篇5——数论四大定理

数论四大定理: 威尔逊定理 欧拉定理 孙子定理(中国剩余定理) 费马小定理 1.威尔逊定理 在初等数论中,威尔逊定理给出了判定一个自然数是否为素数的充分必要条件. 当且仅当$p$为素数时 $(p-1)!\equiv-1(mod\ p)$ 简单点说就是,若$p$为质数,则$p$能被 $(p-1)!+1$ 整除 但是由于阶乘是呈爆炸增长的,其结论对于实际使用不太多. 证明 首先,可以明确 $(p-1)\equiv-1(mod\ p)$ 根据同余式的性质,我们只需要证明 $(p-2)!\equiv1(