zoukankan      html  css  js  c++  java
  • hdu3589 Jacobi symbol(二次剩余 数论题)

    本题的注意点:n=p1*p2*p3......Pm

    解法:直接利用公式a^((p-1)/2)=(a/p)mod p 即可求解。

    #include<stdio.h>
    #include<math.h>
    int flag[1005],p[500],a;
    int d[100];
    int init(int s)
    {
    	int len=0,tmp,h=sqrt(s+0.5);
        for(int i=0;p[i]<=h;i++)
    	if(s%p[i]==0)
    	{
    		if(a%p[i]==0)return -1;
    		while(s%p[i]==0)
    		{
    		    d[len++]=p[i];
    			s/=p[i];
    		}
    		if(s==1)return len;
    	}
    	if(s>1)
    	{
    		if(a%s==0)return -1;//这地方该开始忘了判断了,查错查了好久TTT
    		d[len++]=s;
    	}
    	return len;
    }
    int getans(int x,int s)
    {
    	int tmp=s/2;
    	__int64 ans=1,b=x;
    	while(tmp>0)
    	{
    		if(tmp&1)ans=ans*b%s;
    		b=b*b%s;
    		tmp/=2;
    	}
    	if(ans!=1)return -1;
    	return 1;
    }
    int main()
    {
    	int i,j,k=0,n;
    	for(i=2;i<1000;i++)
    	{
    		if(!flag[i])
    		{
    			p[k++]=i;
    			for(j=i*i;j<1000;j+=i)
    				flag[j]=1;
    		}
    	}
    	while(scanf("%d%d",&a,&n)!=-1)
    	{
    		int len=init(n);
    		if(len==-1)
    		{
    			printf("0
    ");
    			continue;
    		}
    		int ans=1;
            for(i=0;i<len;i++)
    			ans*=getans(a,d[i]);
    		printf("%d
    ",ans);
    	}
    	return 0;
    }


  • 相关阅读:
    创建被访问的swf文件
    BFS寻路算法的实现
    Flex里的命名空间,fx、mx、s【转】
    Flex的基础用法【转】
    Pow(x, n)
    Roman to Integer
    Integer to Roman
    Divide Two Integers
    Single Number II
    Single Number I
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3186899.html
Copyright © 2011-2022 走看看