mod operation on the > 10 bit

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • sanjay123456
    New Member
    • Sep 2006
    • 125

    mod operation on the > 10 bit

    Sir

    i want that mod operation on gr8ter than 10 bit by following code of C


    Code:
     long d,c,b,n;
     int i;
     d= 65073305
     c =7776;
    n=162710186;
     b=1;
    		 for(i=1;i<=d;i++)
    		 {
    			 b=(b*c);
    			 b=b%n;
    		  }


    when loop is is run two time b= 60466176%162710 186 than b = 604666176

    when loop is excuted three time than b =470184984576% 162710186
    but its a wrong because b is long integer and its range is only 10 bit and our
    b is 12 bit so mod operaion is also give wrong solution.......
    How i solve this problem ?
    plz anyone solve this problem


    thanks

    sanjay
  • sivadhas2006
    New Member
    • Nov 2006
    • 142

    #2
    Hi,

    Try this...

    Code:
    unsigned long 
       b = 0;
    I think the unsigned long variable is used to store the largest integer variable.

    Regards,
    M.Sivadhas.

    Comment

    • sanjay123456
      New Member
      • Sep 2006
      • 125

      #3
      Sir ,

      its not solved by unsigned long even if i tried long long that is hold 8 bytes

      but its also print only 10 bit decimal data i want approxmately 20 bit data in decimal format
      whay it so happened i dont understand
      i am using madriva linux 2006 .

      sanjay

      Comment

      • sivadhas2006
        New Member
        • Nov 2006
        • 142

        #4
        Hi,

        Can I know what is purpose of your program?
        So there may be some other possible solution to solve the problem.

        Regards,
        M.Sivadhas.

        Comment

        • sanjay123456
          New Member
          • Sep 2006
          • 125

          #5
          Sir ,

          i want to implement RSA algorithms

          sanjay

          Comment

          • sanjay123456
            New Member
            • Sep 2006
            • 125

            #6
            Sir ,

            whole code r following

            Code:
            
            
            #include<stdio.h>
            #include<math.h>
            long prime();
            
            int gcd(long m);
            long ptr(long m,int e);
            main()
            {
            
            	 unsigned short int  p,q;
            	 int i,e,M;
            	 long n,m,d,c,b;
            	 
            	 long long mt;
            		 
            		 p=prime();
            		 printf("p=%d\n",p);
            		 q=prime();
            		 printf("q=%d\n",q);
            		 n=p*q;
            		 printf("n=%ld\n",n);
            		 m=(p-1)*(q-1);
            		 printf("m=%ld\n",m);
            		 e=gcd(m);
            		 e=5;
            		 printf("e=%d\n",e);
            		 d=ptr(m,e);
            		 printf("d=%ld\n",d);
            
            		 M=6;
            		 printf("M=%d\n",M);
            		 b=1;
            		 for(i=1;i<=e;i++)
            		 {
            			 b=b*M;
            		 }
            				 
            		 c=b%n;
            		 printf("b=%ld\n",b);
            		 printf("cyper text=%d\n",c);	 
            		 mt=1;
            		 for(i=1;i<=d;i++)
            		 {
            			 mt=(mt*c);
            			 mt=mt%n;
            		 }
            
            		 printf("plain text=%ld\n",mt);
            	 
            
            		 return 0;
            }
            
            long prime()
            {
               long odd;
               odd = rand();
               return odd;
            }
               
            int gcd(long m)
            {
            	int i;
            	for(i=2;i<m;i++)
            	{
            		if(m%i!=0)
            		 return i;
            	}
            	
            }	
            
            long ptr(long m,int e)
            {
            	int i,v;
            	long d;
            
            	for(i=0;i<100;i++)
            	{
            		
            	 v=(1+i*m)%e;
            	 if(v==0)
            	 {
            		d=(1+i*m)/e;
            		printf("i=%d\n",i);
            		return d;
            
            	 }
            	}		 
            	
            }
            sanjay

            Comment

            Working...