题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5391
相关数论结论:
威尔逊定理——当且仅当p为素数时:( p -1 )! ≡ p-1 ( mod p )
这道题一开始看到的时候以为是暴力的题目,快速阶乘取模,后来其他题做不出来回头看这道题,
发现可以找规律,当p是合数的时候,P的因子全都可以在P前面的数字的因子里找到,
当p是素数的时候,(p-1)!%p = p-1,就尝试写了一下,2A;
因为4是个例外,怕还有其他例外情况,在100以内小规模跑了一下暴力。
#include<stdio.h> #include<cmath> using namespace std; int judge(int n){ int m = sqrt(n+1); int i; for(i = 2; i <= m; ++i){ if( n % i == 0){ return 0; } } if( i == m + 1) return n-1; } int main(){ int T; int n; int tmp; scanf("%d",&T); while(T--){ scanf("%d",&n); if( n < 100 ){ tmp = 1; for( int i = 1; i < n; ++i){ tmp = tmp * i % n; } printf("%d\n",tmp); } else printf("%d\n",judge(n)); } }
时间: 2024-10-01 04:28:52