ZCMU-1136

image

思路

  1. 一个数学问题
  2. 要知道1为奇数,2^x次方一定为偶数。
  3. 偶数=奇数+奇数,而奇数=奇数*奇数,所以x一定要是奇数才可以。

注意
  • 没告诉范围所以要往大的方向考虑
  • 其中1能够被任一整数整除,所以前面加上对1的判断

参考(费马小定理)

#include<stdio.h>
int main(){
    int i,n,temp;
    
    while(~scanf("%d",&n)){
        temp=1;
        if(n%2&&n>1){
        //必须是大于1的奇数才有,有就一定会跳出循环 
            for(i=1;;++i){
                temp=temp*2%n;
        //在过程中求余数,防止溢出了 
                if(temp==1){
                    printf("2^%d mod %d = 1\n",i,n);
                    break;
                }
            }
        }
        else printf("2^? mod %d = 1\n",n);
    }
    
    return 0;
}
posted @ 2024-05-06 18:31  海&贼  阅读(10)  评论(0)    收藏  举报