HDU 1395
2014-07-07 17:58
169 查看
惭愧啊!以前做过的题再做居然不会了。还是把题目想复杂了。
一般方法:
#include <stdio.h>
int main()
{
int n,s,temp;
while (~scanf("%d",&n))
{
if (n==1||n%2==0)
{
printf("2^? mod %d = 1\n",n);
}
else
{
s=1,temp=2;
while (temp!=1)
{
temp=temp*2%n;
s++;
}
printf("2^%d mod %d = 1\n",s,n);
}
}
return 0;
}
数论方法:
#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <cmath>
using namespace std;
int Euler(int n)
{
int m=sqrt(n+0.5);
int ans=n;
for(int i=2;i<=m;++i)
{
if(n%i==0) ans=ans/i*(i-1);
while(n%i==0)
n/=i;
if(n==1)
break;
}
if(n>1)
ans=ans/n*(n-1);
return ans;
}
bool is_pow(int m,int n)
{
int ans=1,res=2;
while(m)
{
if(m&1)
ans=(ans*res)%n;
res=(res*res)%n;
m=m>>1;
}
return ans==1;
}
int main()
{
int n;
while(~scanf("%d",&n))
{
if((n&1)==0||n==1)
{
printf("2^? mod %d = 1\n",n);
}
else
{
int m=Euler(n),ans;
for(int i=2;;++i)
if(m%i==0&&is_pow(i,n))
{
ans=i;break;
}
printf("2^%d mod %d = 1\n",ans,n);
}
}
return 0;
}
补充:
费马小定理:假如p是质数,且(a,p)=1,那么 a^(p-1) ≡1(mod p)。即:假如a是整数,p是质数,且a,p互质,那么a的(p-1)次方除以p的余数恒等于1。
欧拉定理:若n,a为正整数,且n,a互质,(a,n) = 1,则a^φ(n) ≡ 1 (mod n)。
欧拉函数:少于或等于n的数中与n互质的数的数目。
一般方法:
#include <stdio.h>
int main()
{
int n,s,temp;
while (~scanf("%d",&n))
{
if (n==1||n%2==0)
{
printf("2^? mod %d = 1\n",n);
}
else
{
s=1,temp=2;
while (temp!=1)
{
temp=temp*2%n;
s++;
}
printf("2^%d mod %d = 1\n",s,n);
}
}
return 0;
}
数论方法:
#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <cmath>
using namespace std;
int Euler(int n)
{
int m=sqrt(n+0.5);
int ans=n;
for(int i=2;i<=m;++i)
{
if(n%i==0) ans=ans/i*(i-1);
while(n%i==0)
n/=i;
if(n==1)
break;
}
if(n>1)
ans=ans/n*(n-1);
return ans;
}
bool is_pow(int m,int n)
{
int ans=1,res=2;
while(m)
{
if(m&1)
ans=(ans*res)%n;
res=(res*res)%n;
m=m>>1;
}
return ans==1;
}
int main()
{
int n;
while(~scanf("%d",&n))
{
if((n&1)==0||n==1)
{
printf("2^? mod %d = 1\n",n);
}
else
{
int m=Euler(n),ans;
for(int i=2;;++i)
if(m%i==0&&is_pow(i,n))
{
ans=i;break;
}
printf("2^%d mod %d = 1\n",ans,n);
}
}
return 0;
}
补充:
费马小定理:假如p是质数,且(a,p)=1,那么 a^(p-1) ≡1(mod p)。即:假如a是整数,p是质数,且a,p互质,那么a的(p-1)次方除以p的余数恒等于1。
欧拉定理:若n,a为正整数,且n,a互质,(a,n) = 1,则a^φ(n) ≡ 1 (mod n)。
欧拉函数:少于或等于n的数中与n互质的数的数目。
相关文章推荐
- HDU-1395-2^x mod n = 1(数学题(二次出错))
- zoj1489 hdu 1395 (数论)
- HDU 1395 2^x mod n = 1
- HDU 1395 2^x mod n = 1
- hdu 1395 2^x mod n = 1
- hdu1395-2^x mod n = 1
- HDU 1395 欧拉函数的基本应用
- hdu 1395 2^x mod n = 1
- hdu 1395
- hdu 1395 数论
- hdu 1395
- hdu 1395(2^x mod n = 1)
- hdu-1395 2^x mod n = 1
- HDU 1395 2^x mod n = 1【数学】
- hdu1395 2^x mod n = 1
- HDU——1395 2^x mod n = 1(取模运算法则)
- HDU-1395 2^x mod n = 1
- hdu 1395 欧拉定理+快速幂+素数判定
- ACM 数论 hdu 1395 2^x mod n = 1
- hdu 1395 2^x mod n = 1 (简单数论)