ttyy2018717 2015-08-15 03:27 采纳率: 3.7%
浏览 4330

运行程序时会出现停止工作的提示是怎么回事?

#include
using namespace std;
#include
const int prime[]={10,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,91,97};
int main()
{
mpz_t N,temp,p,a,b,temp1,temp2,temp3,k,chosennum,sqrtnum,P,Q; //mpz_t 为GMP内置大数类型
mpz_init(N); //大数t使用前要进行初始化,以便动态分配空间
mpz_init(temp);
mpz_init(temp1);

mpz_init(temp2);

mpz_init(temp3);

mpz_init(p);
mpz_init(a);
mpz_init(b);
mpz_init(P);
mpz_init(Q);
//mpz_init(k);
mpz_init(chosennum);
mpz_init(sqrtnum);
mpz_ui_pow_ui(chosennum,2,20); //设定比较值。2^40
int perfect_square(mpz_t N); //判断完全平方数
cout<<"输入N:";
//mpz_set(N,);
gmp_scanf("%Zd",N); //输入待分解数
gmp_printf("%Zd\n",N);
int i=1;
int j=1;
int flag;
mpz_set(temp,N);
while(i<=200) //模式1算法
{
//mpz_set(N,temp);
j=1;
for(j=1;j<=i;j++)
mpz_mul_ui(N,N,j);
mpz_sqrt(p,N);
mpz_mod(b,N,p);
mpz_sub(temp1,N,b);
mpz_mul(temp2,p,p);
mpz_sub(temp3,temp1,temp2); //求出参数a,b,p
mpz_cdiv_q(a,temp3,p);
//gmp_printf("p=%Zd\n",p);
//gmp_printf("b=%Zd\n",b);gmp_printf("a=%Zd\n",a);
mpz_init(k);
mpz_set(N,temp);
while(mpz_cmp(chosennum,k))
{
mpz_add(temp1,a,k);
mpz_mul(temp2,temp1,temp1);
mpz_mul(temp3,k,p);
mpz_sub(temp3,b,temp3);
mpz_mul_ui(temp3,temp3,4);
mpz_sub(sqrtnum,temp2,temp3);
//gmp_printf("sqrtnum=%Zd\n",sqrtnum);
flag=perfect_square(sqrtnum);
//if(flag==0)cout<<"不是完全平方数";
if(flag>0)
{
//gmp_printf("sqrtnum=%Zd\n是完全平方数",sqrtnum);
mpz_sqrt(temp1,sqrtnum);
mpz_add(temp2,a,k);
mpz_neg(temp2,temp2);
mpz_add(temp1,temp1,temp2);
mpz_cdiv_q_ui(temp1,temp1,2);
mpz_sub(P,p,temp1);
mpz_gcd(P,P,N);
//if(mpz_cmp_ui(P,1))
//gmp_printf("P=%Zd\n",P);

            mpz_sqrt(temp1,sqrtnum);
            mpz_add(temp2,a,k);
            mpz_neg(temp2,temp2);
            mpz_sub(temp1,temp2,temp1);
            mpz_cdiv_q_ui(temp1,temp1,2);
            mpz_sub(Q,p,temp1); 
            mpz_gcd(Q,Q,N);
            if(mpz_cmp_ui(Q,1)&&mpz_cmp_ui(P,1))

            {gmp_printf("P=%Zd ",P);
            gmp_printf("Q=%Zd ",Q);
            return 0;}

            //return 0;
        }
        mpz_add_ui(k,k,1);
    }

        i++;
    }
mpz_clear(N);
mpz_clear(temp);
mpz_clear(p);
mpz_clear(a);
mpz_clear(b);
mpz_clear(k);
mpz_clear(temp1);
mpz_clear(temp2);
mpz_clear(temp3);
mpz_clear(chosennum);
mpz_clear(sqrtnum);
mpz_clear(P);
mpz_clear(Q);
//mpz_clear();
return 0;

}

int perfect_square(mpz_t N) //判断是否为完全平方数
{
int i=0,k,j;
int temp;
int flag;
while(i<23)
{
k=prime[i]/2+1;
int array=new int[k];
for(j=0;j<k;j++)
array[j]=((j+1)
(j+1))%prime[i];
//temp=N1%prime[i];
temp=mpz_fdiv_ui(N,prime[i]);
j=0;
flag=0;
while(j<k)
{
if(array[j]==temp) flag++;
j++;
}
if(flag==0) return 0;
i++;
}
return 1;

}
请问这段代码有什么错误 ?用VC++6.0编的,为什么输入99982642135860264139,运行后会出现**.exe已停止工作, 是怎么回事啊?

  • 写回答

1条回答 默认 最新

  • oyljerry 2015-08-15 05:53
    关注

    设置断点,运行一下,跟踪找到具体代码函数。

    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?