查看完整版本: 有點搞不懂
頁: [1]

無極狂神 發表於 2016-12-27 12:02 AM

有點搞不懂

本帖最後由 無極狂神 於 2016-12-29 10:45 AM 編輯

是這樣的,最近我們老師希望我們寫出一份RSA加密演算法的作業
程式如果是以分界線以上來做,最後會印出"C=2081"
可是以分界線以下最後則會印出"C=0"???
希望各位前輩能指點迷津,告訴我為何會有這種差異?
p=43,q=59,e=13,M=1819,M^e (mod p*q) = C
程式打得醜,望各位見諒{
        int p=43;
    int q=59;
    int e=13;
    int n=p*q;
    int M=1819;
    int i=1;
    int num;
    for(;i<e;i++){
            if(M<n){
                    num=1819*M;
                    M=num%n;
                }
        }
        int C=M;
       

    print f(" p=%d\n q=%d\n e=%d\n n=%d\n C=%d\n",p,q,e,n,C);
    system("pause");
    return 0;
}
------------------------------我是分界線-----------------------------------------------
#include<stdio.h>
#include<stdlib.h>

int main(){
    int p,q,e,M,num;
    int n=p*q;
    int i=1;
    for(;i<e;i++){
            if(M<n){
                    num=1819*M;
                    M=num%n;
                }
        }
        int C=M;
            print f("p=");
    scanf("%d", &p);

            print f("q=");
    scanf("%d", &q);

    print f("n=%d\n",p*q);

            print f("e=");
    scanf("%d", &e);

            print f("M=");
    scanf("%d", &M);

            print f("C=%d",C);

        system("pause");
        return 0;
}

...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div>

cht1902316 發表於 2016-12-28 11:08 AM

把 print f f 跟t 分開 一點點就不會敏感了喔

無極狂神 發表於 2016-12-28 06:21 PM

cht1902316 發表於 2016-12-28 11:08 AM static/image/common/back.gif
把 print f f 跟t 分開 一點點就不會敏感了喔

大大你認真!? 我只是覺得這跟C的值好像沒有關係?

baepi 發表於 2016-12-29 09:28 PM

分隔線下面錯誤的地方在於....變數在運算前您根本沒有把該填的值放進去...反而是運算後才填值...能對那才叫奇怪...所以幫您改個位置~您要的應該是如下#include<stdio.h>
#include<stdlib.h>

int main()
{
    int p,q,e,M,num;

        print f("p=");
    scanf("%d", &p);
       
        print f("q=");
    scanf("%d", &q);

    print f("n=%d\n",p*q);

        print f("e=");
    scanf("%d", &e);

        print f("M=");
    scanf("%d", &M);

    int n=p*q;
    int i=1;
    for(;i<e;i++)
        {
                if(M<n)
                {
                        num=1819*M;
                        M=num%n;
                }
        }
        int C=M;
        print f("C=%d",C);

        system("pause");
        return 0;
}...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>
頁: [1]